欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)激活碼778899分享:Scala

柚子快報(bào)激活碼778899分享:Scala

http://yzkb.51969.com/

Scala用法總結(jié)

一、什么是scala

spark新一代內(nèi)存級(jí)大數(shù)據(jù)計(jì)算框架,是大數(shù)據(jù)的核心內(nèi)容。

在對(duì) spark 進(jìn)行二次開(kāi)發(fā)時(shí),由于 Spark 是基于 Scala 基礎(chǔ)之上編寫(xiě)的,故而為更好地學(xué)習(xí) Spark,需要Scala 此門(mén)語(yǔ)言與掌握 spark框架的源代碼。

Scala 是 Scalable Language 的簡(jiǎn)寫(xiě),含義為可升級(jí)、可攀登,是一門(mén)多范式的編程語(yǔ)言(面向?qū)ο螅好钍骄幊痰囊环N方式/函數(shù)式編程),函數(shù)的地位得到提升,其運(yùn)用十分到位。

總的來(lái)說(shuō)就是在對(duì)spark進(jìn)行二次開(kāi)發(fā)時(shí)java學(xué)的不太好的朋友可以用scale這門(mén)更加方便的語(yǔ)言進(jìn)行操作。

(個(gè)人認(rèn)為這個(gè)語(yǔ)言對(duì)學(xué)過(guò)java的并不太友好,很接近java,但是又與java不一樣)

(果然學(xué)了python以后覺(jué)得其他語(yǔ)言都很不友好)

二、安裝

1、軟件安裝

解壓安裝包到自定義目錄下

添加環(huán)境變量

2、插件安裝

常做開(kāi)發(fā)的兄弟大多喜歡用idea的產(chǎn)品,那么問(wèn)題來(lái)了scala是否可以使用IJ進(jìn)行開(kāi)發(fā)呢?其實(shí)也不是不行,就是需要安裝對(duì)應(yīng)的插件。

打開(kāi)IJ

File——>Setting——>Plugins 然后搜索scala點(diǎn)擊 install 安裝,點(diǎn)擊OK,apply

2.1 安裝maven

在官網(wǎng)下載maven包并解壓到自定義目錄下

配置環(huán)境變量

在path中添加maven_path

修改配置

D:\Program Files\apache-maven-3.2.2\conf\settings.xml

55行左右配置本地倉(cāng)庫(kù)路徑

D:\Program Files\mavenWarehouse

158行附近配置中央倉(cāng)庫(kù)鏡像源(這里配置的是阿里云的鏡像)

aliyunmaven

*

阿里云公共倉(cāng)庫(kù)

https://maven.aliyun.com/repository/public

2.2 idea配置

筆者使用的時(shí)2023版本的IJ,還記得上次使用的時(shí)2016版本的,與之前比完全不一樣了搗鼓大半天才把環(huán)境配置好。本章節(jié)屬于事后總結(jié),不對(duì)的地方歡迎指正補(bǔ)充。

配置maven

File——>Setting 然后搜索maven進(jìn)行如下配置 (記得所有的配置需要先點(diǎn)擊apply再點(diǎn)擊OK)

配置scala

File——>Project Structures

創(chuàng)建maven項(xiàng)目,然后選中main然后右鍵 Source,Apply,OK。此時(shí)文件夾的顏色發(fā)生變化。

回到工作空間下選中創(chuàng)建的maven項(xiàng)目,然后雙擊shift,搜索 Add Framework Support

點(diǎn)擊進(jìn)入后,勾選添加scala。

至此配置應(yīng)該就結(jié)束了。

三、基本語(yǔ)法

1、helloword

創(chuàng)建scala class 選擇 object,編寫(xiě)并執(zhí)行如下程序

package com.wbb.testscala

object Hello {

def main(args: Array[String]): Unit = {

println("hello scala")

System.out.println("hello scala java")

}

}

scala在線查看幫助手冊(cè):https://www.scala-lang.org/

選擇對(duì)應(yīng)的版本進(jìn)行下載(都是英文的湊合看吧)

2、變量定義

變量類(lèi)型一旦定義則類(lèi)型確定不可發(fā)生修改,如:一個(gè)Int類(lèi)型的變量不可修改為字符串

// var 定義的變量可以發(fā)生修改

var i:Int = 10

// val 定義的變量不可發(fā)生修改

// 定義變量時(shí)數(shù)據(jù)類(lèi)型可省略,scala自動(dòng)識(shí)別變量的數(shù)據(jù)類(lèi)型

val j = 20

object Hello {

def main(args: Array[String]): Unit = {

var name = "wbb"

var age = 18

// 字符串連接

println(name + age)

// 字符串格式化輸出

printf("name: $s, age: $d", name, age)

// 多行字符串

var s =

"""

|select *

|from dual

|""".stripMargin

println(s)

// 變量引用(有點(diǎn)類(lèi)似于python)

var s1 =

s"""

|person:

|name: ${name} age:${age+2}

|""".stripMargin

println(s1)

}

}

輸入變量(從鍵盤(pán)接收變量值, 類(lèi)似java)

object Hello {

def main(args: Array[String]): Unit = {

// 從鍵盤(pán)接收字符串

var name = StdIn.readLine()

// 從鍵盤(pán)接收數(shù)字

var age = StdIn.readInt()

// 變量引用

println(s"name: ${name} age: ${age}")

}

}

3、數(shù)據(jù)類(lèi)型

數(shù)據(jù)類(lèi)型取值范圍Byte[1]-128 到 127Short [2]-32768 到 32767Int [4]-2147483648 到 2147483647Long [8]-(2 的(64-1)次方) = 2 的(64-1)次方-1Float [4]32 位, IEEE 754 標(biāo)準(zhǔn)的單精度浮點(diǎn)數(shù)Double [8]64 位 IEEE 754 標(biāo)準(zhǔn)的雙精度浮點(diǎn)數(shù)Char字符類(lèi)型Boolean布爾類(lèi)型Unit等同于java的void用作無(wú)返回值的方法的數(shù)據(jù)類(lèi)型,main方法的返回值就是UnitNull空類(lèi)型,僅有一個(gè)實(shí)例null。可以賦值給任意引用類(lèi)型(類(lèi)的實(shí)例),但不可以賦值給數(shù)值類(lèi)型。Nothingscala特有,表示所有類(lèi)的子類(lèi)。Nothing類(lèi)型的返回值可以兼容其他類(lèi)型,方便將該類(lèi)型的返回值賦值給其他方法或者變量(包括返回異常)

保留小數(shù)位數(shù)

var a:Double = 1.1111

// 四舍五入保留兩位小數(shù)

println(a.formatted("%.2f"))

4、分支語(yǔ)句(循環(huán))

在scala中if語(yǔ)法與java基本一致,在此處不做說(shuō)明,主要說(shuō)明不同于java的語(yǔ)法

4.1 for循環(huán)

// 從1循環(huán)到10(左閉右閉區(qū)間)

for(i<-1 to 10){

println(i)

}

4.2 util循環(huán)

// 從1循環(huán)到10(左閉右開(kāi)區(qū)間)

for(i<-1 until 10){

println(i)

}

4.3 循環(huán)守衛(wèi)

// 循環(huán)去1到10中3的倍數(shù),滿足條件進(jìn)入循環(huán),不滿足則continue

for(i<-1 to 10 if i % 3 == 0){

println(i)

}

4.4 步長(zhǎng)

// 從1循環(huán)到10的奇數(shù)。默認(rèn)步長(zhǎng)為 1

for(i<-1 to 10 by 2){

println(i)

}

4.5 嵌套循環(huán)

for(i<-1 to 10 by 2; j<-1 to 3){

println("" + i + "和" + j)

}

// for 循環(huán)內(nèi)有多個(gè)表達(dá)式用大括號(hào)換行,或者用小括號(hào)中間加分號(hào)

// 個(gè)人認(rèn)為第二個(gè)格式更美觀一些

for{i<-1 to 10 by 2

j<-1 to 3

}{

println("" + i + "和" + j)

}

4.5 while循環(huán)

while (i<10){

println(i)

i = i + 1

}

4.7 do——while

do {

println(i)

i = i + 1

} while (i<10)

4.8 break

Breaks.breakable(

for (i <- 1 to 10) {

println(i)

if (i == 5) Breaks.break()

}

)

四、函數(shù)

1、函數(shù)基礎(chǔ)

scala的函數(shù)不同于java,使用方法很靈活,基本屬于scala界的大哥大。建議使用的時(shí)候還是參考java進(jìn)行使用,嵌套過(guò)多反而不易解讀,導(dǎo)致程序可讀性和可維護(hù)性變差。

1.1 函數(shù)可以作為值進(jìn)行 傳遞

object Hello {

def main(args: Array[String]): Unit = {

//調(diào)用函數(shù),把返回值給變量 f(因?yàn)楹瘮?shù)沒(méi)有參數(shù),所以調(diào)用的括號(hào)可以省略)

//val f = fun1()

val f = fun1

println(f)

// 函數(shù)后面加 _,相當(dāng)于把函數(shù)當(dāng)成一個(gè)整體,傳遞給變量 f1,此時(shí)f1也是一個(gè)函數(shù),可以被調(diào)用

val f1 = fun1 _

f1()

//如果明確變量類(lèi)型,不使用下劃線也可以將函數(shù)作為整體傳遞給 變量

var f2:()=>Int = fun1

f2()

}

def fun1():Int = {

println("fun1被調(diào)用")

1

}

}

1.2 函數(shù)可以作為參數(shù)進(jìn)行傳遞

object Hello {

def main(args: Array[String]): Unit = {

def f1(a: Int, b: Int): Int = a + b

// 定義一個(gè)函數(shù),函數(shù)參數(shù)還是一個(gè)函數(shù)簽名;f 表示函數(shù)名稱(chēng);(Int,Int) 表示輸入兩個(gè) Int 參數(shù);Int 表示函數(shù)返回值

def f2(f: (Int, Int) => Int): Int = {

f(2, 4)

}

println(f2(f1))

}

}

1.3 函數(shù)可以作為返回值進(jìn)行傳遞

object Hello {

def main(args: Array[String]): Unit = {

def f2(): Any = {

def f1(a: Int, b: Int): Int = a + b

f1 _

}

println(f2())

}

}

2、函數(shù)進(jìn)階

2.1 模擬實(shí)現(xiàn)map映射

按照傳入的函數(shù)操作Array中的每個(gè)值

object Hello {

def main(args: Array[String]): Unit = {

// 定義函數(shù)map,第一個(gè)參數(shù)為數(shù)組,第二個(gè)參數(shù)為函數(shù)op,op的參數(shù)和返回值都是Int

// 返回值為Array,yield是將數(shù)組的每個(gè)值用函數(shù)進(jìn)行處理,每個(gè)值改變?yōu)楹瘮?shù)op的返回值

def map(arr: Array[Int], op: Int => Int) = {

for(a <- arr) yield op(a)

}

// 調(diào)用map,第一個(gè)參數(shù)是數(shù)組(1,2,3,4),第二個(gè)參數(shù)為匿名函數(shù),匿名函數(shù)返回值為參數(shù)的平方

var arr = map(Array(1, 2, 3, 4),(x:Int) => {x * x})

// 將Array轉(zhuǎn)換為字符串

println(arr.mkString(","))

}

}

2.2 模擬實(shí)現(xiàn)Filter過(guò)濾

按照函數(shù)的規(guī)則篩選Array

import scala.collection.mutable.ArrayBuffer

object Hello {

def main(args: Array[String]): Unit = {

// 定義函數(shù)filter,第一個(gè)參數(shù)為Array類(lèi)型,第二個(gè)參數(shù)為函數(shù)op,op的參數(shù)為Int類(lèi)型,返回布爾值

def filter(arr:Array[Int],op:Int =>Boolean) ={

// 定義變長(zhǎng) Array

var arr1:ArrayBuffer[Int] = ArrayBuffer[Int]()

// 便利array,每次元素調(diào)用op,返回值為true則將元素添加到變長(zhǎng)Array

for(elem <- arr if op(elem)){

arr1.append(elem)

}

// 變長(zhǎng)Array轉(zhuǎn)換為Array

arr1.toArray

}

// 調(diào)用filter,第一個(gè)參數(shù)為數(shù)組(1,2,3,4),第二個(gè)參數(shù)為匿名函數(shù),判斷匿名函數(shù)的參數(shù)是否為奇數(shù)

var arr1 = filter(Array(1, 2, 3, 4), _ % 2 == 1)

println(arr1.mkString(","))

}

}

2.3 模擬實(shí)現(xiàn)reduce規(guī)約累乘

將一個(gè)Array的元素逐個(gè)相乘

object Hello {

def main(args: Array[String]): Unit = {

def reduce(arr: Array[Int], op: (Int, Int) => Int) = {

var init: Int = arr(0)

for (elem <- 1 to arr.length) {

init = op(init, elem)

}

init

}

val chen = reduce(Array(1, 2, 3, 4), _ * _)

println(chen)

}

}

3、遞歸

階乘

object Hello {

def main(args: Array[String]): Unit = {

def jiechen(a: Int): Int = {

if (a == 1) {

return 1

}

a * jiechen(a - 1)

}

println(jiechen(3))

}

}

4、惰性加載

有時(shí)為了節(jié)約資源開(kāi)銷(xiāo),或者程序設(shè)計(jì),期望函數(shù)的返回值被使用的時(shí)候再去加載函數(shù),這里專(zhuān)業(yè)叫法是惰性加載,關(guān)鍵字為lazy。(lazy只可以加在val變量之前)

object Hello {

def main(args: Array[String]): Unit = {

lazy val res = addnum(1, 2)

println("test print")

// 此處用到變量值才開(kāi)始調(diào)用函數(shù)

println(res)

def addnum(a: Int, b: Int): Int = {

a + b

}

}

}

五、類(lèi)

1、類(lèi)的屬性

package com.wbb.testscala

import scala.beans.BeanProperty

class Person {

var name: String = "bobking"

// 給屬性age賦予默認(rèn)的Int值,這里查看是 0

var age: Int = _

// 注解為sex屬性添加了get set方法(與java bean類(lèi)似)

@BeanProperty var sex: String = "不詳"

}

object Person {

def main(args: Array[String]): Unit = {

var person = new Person()

println(person.name)

person.setSex("女")

println(person.getSex)

}

}

2、類(lèi)的方法

與java類(lèi)似下一小結(jié)中的say方法就是Person類(lèi)的方法

2.1構(gòu)造器

輔助構(gòu)造器:一個(gè)類(lèi)可以有多個(gè)輔助構(gòu)造器,輔助構(gòu)造器必須調(diào)用主構(gòu)造器,輔助構(gòu)造器可以有多個(gè)。

class Person {

var name: String = _

var age: Int = _

def this(age: Int) {

this()

this.age = age

println("輔助構(gòu)造器")

}

def this(age: Int, name: String) {

this(age)

this.name = name

}

println("主構(gòu)造器")

}

object Person {

def main(args: Array[String]): Unit = {

val person2 = new Person(22)

}

}

輸出結(jié)果如下

主構(gòu)造器

輔助構(gòu)造器

3、訪問(wèn)權(quán)限

package com.wbb.testscala

class Person {

// 私有屬性,僅類(lèi)和類(lèi)的對(duì)象可用

private var name: String = "bobking"

// 保護(hù)權(quán)限屬性,僅同類(lèi)和子類(lèi)可以使用

protected var age: Int = 18

// testscala包下的其他類(lèi)可以使用

private[testscala] var sex: String = "不詳"

def say(): Unit = {

println("牛B")

}

}

class Hiker extends Person {

def test(): Unit = {

this.age

this.sex

}

}

object Person {

def main(args: Array[String]): Unit = {

val person = new Person

person.say()

println(person.name)

println(person.age)

val wbb = new Hiker

println(teacher.age)

}

}

4、類(lèi)的繼承

scala的子類(lèi)繼承父類(lèi)的屬性和方法,先執(zhí)行父類(lèi)的構(gòu)造器再執(zhí)行子類(lèi)的構(gòu)造器。(只能是單繼承)

package com.wbb.testscala

class Person() {

var name: String = _

var age: Int = _

def this(age: Int) {

this()

this.age = age

println("輔助構(gòu)造器")

}

println("person的主構(gòu)造器")

}

class Hiker(p_name: String, p_age: Int) extends

Person{

var language: String = _

def this(p_name: String, p_age: Int, p_language: String){

this(p_name, p_age)

this.name = p_name

this.age = p_age

}

println("Hiker的主構(gòu)造器")

}

object Hello {

def main(args: Array[String]): Unit = {

val a = new Hiker("bobking", 30, "scala")

}

}

輸出結(jié)果為

person的主構(gòu)造器

Hiker的主構(gòu)造器

5、抽象

和java一樣,有時(shí)需要抽象出一個(gè)類(lèi),在這個(gè)類(lèi)的基礎(chǔ)上那可以拓展出多個(gè)子類(lèi),每個(gè)類(lèi)有自己獨(dú)有的實(shí)現(xiàn)方式。

package com.wbb.testscala

// 抽象類(lèi)(關(guān)鍵字abstract)

abstract class Person() {

// 抽象屬性(僅有屬性的定義,沒(méi)有賦值)

var name: String

// 抽象方法(僅有方法的聲明,沒(méi)有實(shí)現(xiàn)方式)

def who(): Unit

}

// 子類(lèi)繼承抽象類(lèi),必須實(shí)現(xiàn)抽象類(lèi)所有的方法與屬性

// 重寫(xiě)非抽象類(lèi)的方法和屬性不需要overwrite關(guān)鍵字

class Hiker() extends{

var name: String = "bobking"

def who(): Unit = {

println(this.name)

}

}

object Hello {

def main(args: Array[String]): Unit = {

val a = new Hiker()

a.who()

}

}

6、伴生對(duì)象

其實(shí)說(shuō)白了也就是java的靜態(tài)類(lèi),原理不同但實(shí)現(xiàn)的效果是沒(méi)什么差異的。類(lèi)的半生對(duì)象與類(lèi)同名,可以通過(guò)類(lèi)的半生對(duì)象直接訪問(wèn)類(lèi)的屬性和方法,不需要再單獨(dú)定義一個(gè)類(lèi)對(duì)象,從而實(shí)現(xiàn)單實(shí)例。

package com.wbb.testscala

class Person {

var name: String = "bobking"

}

object Person {

var age:Int = 35

}

object Hello {

def main(args: Array[String]): Unit = {

println(Person.name)

}

}

7、類(lèi)的特質(zhì)

java中有接口,scala中同樣有,將通用的方法和屬性進(jìn)行封裝。(關(guān)鍵字 Trait)

scala的類(lèi)僅可以單繼承,但是特質(zhì)可以多繼承,多個(gè)特質(zhì)之間用with關(guān)鍵字進(jìn)行連接。

特質(zhì)的使用很靈活可以不進(jìn)行定義直接在創(chuàng)建對(duì)象的時(shí)候混入。繼承特質(zhì)時(shí)特質(zhì)中的抽象類(lèi)和抽象方法都需要重寫(xiě),非抽象屬性不可以重新賦值。

package com.wbb.testscala

// 定義特質(zhì),特質(zhì)中的屬性和方法可以使抽象的也可以是具體的

trait PersonTrait {

var name: String = _

var age: Int

def play(): Unit = {

println("摸魚(yú)")

}

def say(): Unit

}

trait SexTrait {

var sex: String

}

trait HobbyTrait{

var hobby: String = "愛(ài)吃了睡"

}

//一個(gè)類(lèi)可以實(shí)現(xiàn)/繼承多個(gè)特質(zhì)

class Hiker extends PersonTrait with SexTrait {

override def say(): Unit = {

println("say")

}

override var age: Int = _

override var sex: String = _

}

object Test {

def main(args: Array[String]): Unit = {

val hiker = new Hiker

hiker.say()

hiker.play()

// 動(dòng)態(tài)混入

val t2 = new Hiker with HobbyTrait {

}

//調(diào)用混入 trait 的屬性

println(t2.hobby)

}

}

7.1 特質(zhì)疊加

當(dāng)一個(gè)類(lèi)繼承多個(gè)特質(zhì),特質(zhì)中有同名方法是就會(huì)涉及到特質(zhì)疊加。

super.play是執(zhí)行疊加好的下一個(gè)對(duì)象的play方法

疊加順序如下

Hiker——>HobbyTrait——>SexTrait——>PersonTrait

package com.wbb.testscala

trait PersonTrait {

var name: String = _

def play(): String = {

"摸魚(yú)"

}

}

trait SexTrait extends PersonTrait {

override def play(): String = {

"男-" + super.play()

}

}

trait HobbyTrait extends PersonTrait {

override def play(): String = {

"愛(ài)吃了睡-" + super.play()

}

}

class Hiker extends SexTrait with HobbyTrait {

override def play(): String = {

"程序員-" + super.play()

}

}

object Test {

def main(args: Array[String]): Unit = {

val hiker = new Hiker

val p = hiker.play()

println(p)

}

}

調(diào)用某個(gè)繼承特質(zhì)的方法:super[特質(zhì)名稱(chēng)].fangfam()

hiker對(duì)象

輸出結(jié)果為

程序員-愛(ài)吃了睡-男-摸魚(yú)

package com.wbb.testscala

class Person {

var name: String = _

}

object Test {

def main(args: Array[String]): Unit = {

var hiker = new Person()

// 判斷對(duì)象是否是某個(gè)類(lèi)的實(shí)例

println(hiker.isInstanceOf[Person])

// 將對(duì)象轉(zhuǎn)換為某個(gè)類(lèi)的實(shí)例

var h1 = hiker.asInstanceOf[Person]

println(h1)

// 獲取類(lèi)信息

println(classOf[Person])

}

}

輸出結(jié)果如下

true

com.wbb.testscala.Person@5e025e70

class com.wbb.testscala.Person

六、集合

Scala 的集合有三大類(lèi):序列 Seq、集 Set、映射 Map,所有的集合都擴(kuò)展自 Iterable

特質(zhì)。

不可變集合:scala.collection.immutable

可變集合: scala.collection.mutable

1、數(shù)組

1.1 不可變數(shù)組

package com.wbb.testscala

object Hello {

def main(args: Array[String]): Unit = {

// 數(shù)組定義

val a1 = new Array[Int](5)

println(a1.length)

val a11 = Array(1, 2, "aaa")

println(a11.mkString(","))

// 數(shù)組元素賦值,注意這里是圓括號(hào)

a1(2) = 1

// 修改數(shù)組下標(biāo)為1的元素值為10

a1.update(1, 10)

// 數(shù)組轉(zhuǎn)字符串(查看)

println(a1.mkString(","))

// 數(shù)組遍歷

for(ele <- a1){

println(ele)

}

a1.foreach((x:Int)=>{println(x)})

// 數(shù)組添加元素,在a1的基礎(chǔ)上添加元素 5,組成新的數(shù)組

val a2: Array[Int] = a1 :+ 5

println(a2.mkString(","))

}

}

1.2 可變數(shù)組

package com.wbb.testscala

import scala.collection.mutable.ArrayBuffer

object Hello {

def main(args: Array[String]): Unit = {

// 可變數(shù)組定義,并為數(shù)組賦初始值

var a1 = ArrayBuffer[Any](1, 2, 3)

println(a1.mkString(","))

// 查看數(shù)組的hash值

println(a1.hashCode())

a1.+= (3)

// 追加元素 4,5到數(shù)組

a1.append(4, 5)

println(a1.mkString(","))

// 在數(shù)組0號(hào)位添加元素 5,6

a1.insert(0, 5, 6)

println(a1.mkString(","))

}

}

1.3 轉(zhuǎn)換

// 可變數(shù)組轉(zhuǎn)不可變

a2 = a1.toArrry

// 不可變數(shù)組轉(zhuǎn)可變

a3 = a2.toBuffer

1.4 多維數(shù)組

package com.wbb.testscala

object Hello {

def main(args: Array[String]): Unit = {

// 可變數(shù)組定義,并為數(shù)組賦初始值

var a1 = Array.ofDim[Any](2, 3)

a1(1)(1) = "wbb"

for(x <- a1){

for(j <- x){

println(": " + j)

}

}

}

}

2、列表

2.1 不可變list

package com.wbb.testscala

object Hello {

def main(args: Array[String]): Unit = {

val l = List(1, 2, 3)

// Nil為空

val l1 = 1::2::Nil

// 在l列表的前面加元素 4

val l2 = 4::l

// 在頭部添加元素 5

val l3 = l.+:(5)

// 在尾部添加元素 5

val l31 = l.:+(5)

// 將兩個(gè)列表連接成為一個(gè)

val l4 = l:::l1

l4.foreach(println)

}

}

2.2 可變listBuffer

package com.wbb.testscala

import scala.collection.mutable.ListBuffer

object Hello {

def main(args: Array[String]): Unit = {

// 創(chuàng)建一個(gè)可變數(shù)組

val b = ListBuffer(1,2,3,4)

// 向數(shù)組中添加數(shù)據(jù)

b.+=(5)

b.append(6)

// 向數(shù)組指定位置添加元素

b.insert(1,2,3)

// 修改數(shù)據(jù)

b(1) = 6

b.update(1,7)

// 刪除數(shù)據(jù)

b.-=(5)

b.remove(5)

}

}

3、集合

集合的元素不可重復(fù),元素?zé)o序

3.1 不可變集合

val set = Set(1,2,3)

3.2 可變集合

package com.wbb.testscala

import scala.collection.mutable

object Hello {

def main(args: Array[String]): Unit = {

// 創(chuàng)建可變集合

val s = mutable.Set(1,2,3,4,5,6)

// 集合添加元素

s += 8

// 向集合中添加元素,返回一個(gè)新的 Set

val s1 = s.+(9)

// 刪除數(shù)據(jù)

s-=(5)

}

}

4、Map集合

用于存儲(chǔ)鍵值對(duì)

4.1 不可變Map

package com.wbb.testscala

object Hello {

def main(args: Array[String]): Unit = {

// 創(chuàng)建map

val map = Map("a"->1, "b"->2, "c"->3)

// 遍歷map中的值

for(m <- map.keys){

println(map(m))

}

// 按照key值獲取對(duì)應(yīng)的map值,若未找到則賦值為0

println(map.getOrElse("d", 0))

// 循環(huán)打印map

map.foreach(m=>{println(m)})

}

}

4.2 可變map

package com.wbb.testscala

import scala.collection.mutable

object Hello {

def main(args: Array[String]): Unit = {

// 創(chuàng)建可變map

val map = mutable.Map("a"->1, "b"->2, "c"->3)

// map添加元素

map.+=("d"-> 4, "e"->5)

// map刪除元素

map.-=("a","b")

// map修改值

map.update("c", 100)

map.foreach(m=>{println(m)})

}

}

5、元組

元組就是將多個(gè)無(wú)關(guān)的數(shù)據(jù)封裝為一個(gè)整體(元組最大可有22個(gè)元素)

package com.wbb.testscala

object Hello {

def main(args: Array[String]): Unit = {

// 聲明元組

val tuple:(String, Int, String) = ("wbb",20,"男")

// 元組訪問(wèn)

println(tuple._1)

// 通過(guò)下標(biāo)訪問(wèn)元組

println(tuple.productElement(0))

// 通過(guò)迭代器訪問(wèn)

for(t <- tuple.productIterator){

println(t)

}

}

}

6、集合操作

6.1 定義集合

val l: List[Int] = List(1,2,3,4)

val l1: List[Int] = List(5,6,7,8)

6.2 判斷l(xiāng)ist是否包含 3

println(l.contains(3))

輸出結(jié)果

true

6.3 獲取集合的首個(gè)元素

println(l.head)

輸出結(jié)果

1

6.4 獲取集合的最后一個(gè)元素

println(l.last)

輸出結(jié)果

4

6.5 獲取集合的尾(去除頭元素)

println(l.tail)

輸出結(jié)果

List(2,3,4)

6.6 獲取集合的頭(去除最后一個(gè)元素)

println(l.init)

輸出結(jié)果

List(1,2,3)

6.7 集合反轉(zhuǎn)

println(l.reverse)

輸出結(jié)果

List(4,3,2,1)

6.8 集合截?。◤淖箝_(kāi)始2位)

println(l.take(2))

輸出結(jié)果

List(3, 4)

6.9 集合刪除元素(右開(kāi)始2位)

println(l.dropRight(2))

輸出結(jié)果

List(1, 2)

6.10 集合拉鏈

println(l.zip(l1))

輸出結(jié)果

List((1,5), (2,6), (3,7), (4,8))

6.11 集合滑動(dòng)

l.sliding(3,2).foreach(println)

輸出結(jié)果

List(1, 2, 3)

List(3, 4)

6.12 集合排序

package com.wbb.testscala

object Hello {

def main(args: Array[String]): Unit = {

val l: List[Int] = List(1,2,3,-4)

// 求和

println(l.sum)

// 求乘積

println(l.product)

println(l.max)

println(l.min)

println(l.sorted)

// 按照絕對(duì)值排序

println(l.sortBy(x=>x.abs))

// 按照指定規(guī)則排序(從小到大)

println(l.sortWith((x,y)=>(x

}

}

七、函數(shù)進(jìn)階

package com.wbb.testscala

object Hello {

def main(args: Array[String]): Unit = {

val list: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)

val nestedList: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6), List(7, 8, 9))

val wordList: List[String] = List("hello world", "hello wbb", "hello hiker")

// 過(guò)濾

println(list.filter(x => x % 2 == 0))

// 轉(zhuǎn)化

println(list.map(x => x + 1))

//扁平化

println(nestedList.flatten)

// 扁平化+映射 注:flatMap 相當(dāng)于先進(jìn)行 map 操作,在進(jìn)行 flatten操作

println(wordList.flatMap(x => x.split(" ")))

//分組

println(list.groupBy(x => x % 2))

}

}

執(zhí)行結(jié)果如下

List(2, 4, 6, 8)

List(2, 3, 4, 5, 6, 7, 8, 9, 10)

List(1, 2, 3, 4, 5, 6, 7, 8, 9)

List(hello, world, hello, nidaye, hello, scala)

Map(1 -> List(1, 3, 5, 7, 9), 0 -> List(2, 4, 6, 8))

八、隊(duì)列

先進(jìn)先出

package com.wbb.testscala

import scala.collection.mutable

object Hello {

def main(args: Array[String]): Unit = {

val que = new mutable.Queue[String]()

que.enqueue("a", "b", "c")

println(que.dequeue())

println(que.dequeue())

println(que.dequeue())

}

}

九、模式

package com.wbb.testscala

object Hello {

def main(args: Array[String]): Unit = {

var a = 1

var b = 2

var op = "no"

var res = op match{

case "+" => a + b

case "-" => a - b

case _ => "未知"

}

println(res)

}

}

模式守衛(wèi)

package com.wbb.testscala

object Hello {

def main(args: Array[String]): Unit = {

def abs(x:Int)=x match{

case i:Int if i > 0 => x

case j:Int if j < 0 => -x

case _ => "啥也不是"

}

println(abs(-5))

}

}

latten) // 扁平化+映射 注:flatMap 相當(dāng)于先進(jìn)行 map 操作,在進(jìn)行 flatten操作 println(wordList.flatMap(x => x.split(" "))) //分組 println(list.groupBy(x => x % 2)) } }

執(zhí)行結(jié)果如下

```textile

List(2, 4, 6, 8)

List(2, 3, 4, 5, 6, 7, 8, 9, 10)

List(1, 2, 3, 4, 5, 6, 7, 8, 9)

List(hello, world, hello, nidaye, hello, scala)

Map(1 -> List(1, 3, 5, 7, 9), 0 -> List(2, 4, 6, 8))

八、隊(duì)列

先進(jìn)先出

package com.wbb.testscala

import scala.collection.mutable

object Hello {

def main(args: Array[String]): Unit = {

val que = new mutable.Queue[String]()

que.enqueue("a", "b", "c")

println(que.dequeue())

println(que.dequeue())

println(que.dequeue())

}

}

九、模式

package com.wbb.testscala

object Hello {

def main(args: Array[String]): Unit = {

var a = 1

var b = 2

var op = "no"

var res = op match{

case "+" => a + b

case "-" => a - b

case _ => "未知"

}

println(res)

}

}

模式守衛(wèi)

package com.wbb.testscala

object Hello {

def main(args: Array[String]): Unit = {

def abs(x:Int)=x match{

case i:Int if i > 0 => x

case j:Int if j < 0 => -x

case _ => "啥也不是"

}

println(abs(-5))

}

}

柚子快報(bào)激活碼778899分享:Scala

http://yzkb.51969.com/

推薦閱讀

評(píng)論可見(jiàn),查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18714858.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄