scala函數(shù)悠瞬,方法们豌,數(shù)組涯捻,集合基礎(chǔ)使用說明

scala的高階函數(shù)

1、函數(shù)和方法二則都是在定義邏輯

方法

def sum_m(a:Int,b:Int):int=a+b

函數(shù)

val sum_f:(Int,Int)=>Int=(x,y)=>x+y

函數(shù)和方法可以互換

方法可以轉(zhuǎn)為函數(shù):

val f1=sum_m

函數(shù)可以轉(zhuǎn)為方法:

def m1=sum_m

2望迎、高階函數(shù)的定義

(方法|函數(shù))f可以作為(方法|函數(shù))ff的參數(shù)障癌,也可以作為(方法|函數(shù))ff的返回值

方法和函數(shù)就是執(zhí)行邏輯

高階函數(shù)的通俗解釋

1、可以把一段邏輯當(dāng)做參數(shù)辩尊,傳遞給另一段處理邏輯

2涛浙、也可以讓某一段處理邏輯的返回值,就是一個(gè)函數(shù)

方法可以作為方法的參數(shù)

函數(shù)可以作為方法的參數(shù)

方法可以作為函數(shù)的參數(shù)

函數(shù)可以作為函數(shù)的參數(shù)

方法可以作為方法的返回值

函數(shù)可以作為方法的返回值

方法可以作為函數(shù)的返回值

函數(shù)可以作為函數(shù)的返回值

object Basics_Day01 {

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

//調(diào)用m1方法傳入f1函數(shù)

val? a= m1(f1)

println(a)

//調(diào)用m1方法傳入f2函數(shù)

val a1=m1(f2)

println(a1)

//調(diào)用m2方法傳入f1函數(shù)

val? b= m2(f1,2,4)

println(b)

//調(diào)用m2方法傳入f2函數(shù)

val b1=m2(f2,3,4)

println(b1)

//調(diào)用m2方法傳入m3函數(shù)

println(m2(m3,2,4))

}

? /**定一個(gè)方法

* 方法的參數(shù)是個(gè)函數(shù)摄欲,函數(shù)的參數(shù)是兩個(gè)int類型

* 返回值為int類型

*/

? def m1(f:(Int,Int)=>Int):Int=f(1,2)

? //定義一個(gè)計(jì)算數(shù)據(jù)可變的函數(shù)

? def m2(f:(Int,Int)=>Int,x:Int,y:Int):Int=f(x,y)

? //定義一個(gè)需要兩個(gè)Int類型參數(shù)的方法

? def m3(a:Int,b:Int):Int=a+b

? //定義一個(gè)函數(shù)轿亮,參數(shù)類型是兩個(gè)int類型,返回值是一個(gè)int類型

? val f1=(x:Int,y:Int)=>x+y

? val f2=(a:Int,b:Int)=>a*b

}

數(shù)組

定長數(shù)組

package com.liu.meng.day13

/**

? * scala的數(shù)組的學(xué)習(xí)

? * 定長定長數(shù)組和可變數(shù)組

? * 定長數(shù)組Arrray

? * 定長數(shù)組沒有add胸墙,inster我注,remove操作只能修改某個(gè)位置的元素的值,要實(shí)現(xiàn)刪除

? * 可以通過過濾生成新的 Array 的方式來刪除不要的元素

? * 可變數(shù)組ArrayBuffer

? * 可變數(shù)組可以進(jìn)行增加迟隅,刪除等操作

? *

? * 定長數(shù)組和可變數(shù)組之間的轉(zhuǎn)換 通過調(diào)用toBuffer()和toArray()來實(shí)現(xiàn)

? *

? */

object ArrayClass {

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

//初始化一個(gè)數(shù)組

val arr=Array(1,2,3,4,5,6,7,8)

//增強(qiáng)for循環(huán)

for (i<-arr){

? println(i)

}

println("=============================")

//使用to可以生成一個(gè)序列作為腳標(biāo)

for (i<-(0 to arr.length-1)){

? println(arr(i))

}

println("=============================")

for (i<-(0 until arr.length)){

? println(arr(i))

}

println("=============================")

//步長為2

for (i<-0 until (arr.length,2)){

? println(arr(i))

}

println("=============================")

//反轉(zhuǎn)

for (i<-(0 until arr.length).reverse){

? println(arr(i))

}

println("=============================")

? ? ? ? ? ? //數(shù)組轉(zhuǎn)換將偶數(shù)取出乘以10以后在生成一個(gè)新數(shù)組

val res=for (e<-arr if e%2==0)yield e * 10

println(res.toBuffer)

println("===============")

//更高級寫法但骨,filter 是過濾,接收一個(gè)返回值為boolean的函數(shù)

//map相當(dāng)于將數(shù)組中的每一個(gè)元素取出來智袭,應(yīng)用傳進(jìn)去的函數(shù)

val r=arr.filter(_%2==0).map(_*10)

println(r.toBuffer)

//數(shù)組中的常用算法

//求和

println(arr.sum)

//最大值

println(arr.max)

//最小值

println(arr.min)

//返回帶有集合元素信息的集合名稱

println(arr.toString)

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

println(arr.mkString())

//數(shù)組轉(zhuǎn)為字符串指定分隔符

println(arr.mkString(“,”))

//數(shù)組轉(zhuǎn)為字符串指定分隔符和前后標(biāo)記

println(arr.mkString(“<”,“,”,“>”))

? }

}

集合

不可變集合

? package com.liu.meng.day13

/**

? * scala集合簡單操作

? * scala集合有三大類序列Seq奔缠,集合Set,映射Map所有集合都擴(kuò)展自iterable特質(zhì)

? * scala集合有可變(mutable)和不可變(immutable)兩種類型

? *

? *

? */

object AggregateClass {

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

/**List序列

*在scala中列表要么為空(NIl表示空列表)要么是一個(gè)head元素加上一個(gè)tail列表

*9::List(5,2) ::操作符是將給定的頭和尾創(chuàng)建一個(gè)新的列表

*注意 ::操作符是右結(jié)合的补履,例如9::5::2::NIL相當(dāng)于9::(5::(2::Nil))

*/

? //創(chuàng)建集合

val list1=List(1,2,3)

val list2=0::list1

val list3=list1.::(0)

val list4=0+:list1

val list5=list1.+:(0)

val list6=list1:+3

val ls0=List(4,5,6)

//集合合并

val ls2=ls0++list1

//將list1插入到ls0前

val ls3=ls0++:list1

//將list1插入到ls0前

val ls4=list1.:::(ls0)

println(ls4)

//取列表最后一個(gè)元素

println(list1.last)

//取除了最后一個(gè)元素以外的元素

println(list1.init)

//反轉(zhuǎn)

println(list1.reverse)

//截取前n個(gè)元素

println(list1.take(2))

//丟棄前n個(gè)元素

println(list1.drop(1))

//分割成2列表有第一個(gè)列表有n個(gè)元素

println(ls4.splitAt(4))

? //輸出

println(list1.toString())

//轉(zhuǎn)為String

println(list1.mkString)

//轉(zhuǎn)為數(shù)組

println(list1.toArray.toBuffer)

? }

}

可變列表

? ? ? ? package com.liu.meng.day13

import scala.collection.mutable.ListBuffer

/**

? * 可變列表List

? */

object ArregateClass1 {

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

//創(chuàng)建可變列表

val list0=ListBuffer[Int](1,2,3)

//創(chuàng)建空的可變列表

val list1=new ListBuffer[Int]

//向集合中追加元素和添坊、未生成新的集合

list1+=4

list1.append(5)

//將list1中的元素追加到list0中,未生成新的集合

list0++=list1

//生成新集合

val? list2=list0++list1

val list3=list1:+5

? }

}

Set集合

package com.liu.meng.day13

import scala.collection.immutable.HashSet

import scala.collection.mutable

/**

? * set集合

? */

object AggregateSet extends? App {

//不可變set

val set1=new HashSet[Int]()

//生成新的Set

val set2=set1+4

//set中的元素不能重復(fù)

val set3=set2++Set(5,6,7)

val set4=Set(1,3,4)++set1

println(set4)

? //創(chuàng)建一個(gè)可變的 HashSetval

? val? set5 = new mutable.HashSet[Int]()

? //向 HashSet 中添加元素

? set5 += 2

? //add 等價(jià)于+=

? set5.add(4)

? set5 ++= Set(1,3,5)

? println(set1)

? //刪除一個(gè)元素

? set5 -= 5

? set5.remove(2)

? println(set5)

}

MAP集合

package com.liu.meng.day13

import scala.collection.mutable

object MapClass? extends? App {

? //創(chuàng)建Map

val map1=new mutable.HashMap[String,Int]()

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

? map1.put("aa",1)

? map1("b")=2

? map1+=(("c",1))

? println(map1)

? //移除數(shù)據(jù)

? map1-="aa"

? map1.remove("b")

? println(map1)

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

? map1("c")=100

? println(map1)


}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末箫锤,一起剝皮案震驚了整個(gè)濱河市贬蛙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谚攒,老刑警劉巖阳准,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異馏臭,居然都是意外死亡野蝇,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進(jìn)店門括儒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绕沈,“玉大人,你說我怎么就攤上這事帮寻≌Ш” “怎么了?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵固逗,是天一觀的道長浅蚪。 經(jīng)常有香客問我藕帜,道長,這世上最難降的妖魔是什么惜傲? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任洽故,我火速辦了婚禮,結(jié)果婚禮上盗誊,老公的妹妹穿的比我還像新娘时甚。我一直安慰自己,他們只是感情好浊伙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布撞秋。 她就那樣靜靜地躺著,像睡著了一般嚣鄙。 火紅的嫁衣襯著肌膚如雪吻贿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天哑子,我揣著相機(jī)與錄音舅列,去河邊找鬼。 笑死卧蜓,一個(gè)胖子當(dāng)著我的面吹牛帐要,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播弥奸,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼榨惠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了盛霎?” 一聲冷哼從身側(cè)響起赠橙,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎愤炸,沒想到半個(gè)月后期揪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡规个,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年凤薛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诞仓。...
    茶點(diǎn)故事閱讀 40,021評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡缤苫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出墅拭,到底是詐尸還是另有隱情活玲,我是刑警寧澤,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布帜矾,位于F島的核電站翼虫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏屡萤。R本人自食惡果不足惜珍剑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望死陆。 院中可真熱鬧招拙,春花似錦、人聲如沸措译。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽领虹。三九已至规哪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間塌衰,已是汗流浹背诉稍。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留最疆,地道東北人杯巨。 一個(gè)月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像努酸,于是被迫代替她去往敵國和親服爷。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 數(shù)組 :new Array[Int](8)與Array[Int](8)的區(qū)別:第一種8個(gè)元素获诈,第二個(gè)定義一個(gè)值為8...
    夙夜M閱讀 1,774評論 1 2
  • 3.數(shù)組仍源、映射、元組烙荷、集合 3.1數(shù)組 3.1.1定長數(shù)組和變長數(shù)組 object ArrayDemo {def ...
    G__yuan閱讀 523評論 0 2
  • Scala的集合類可以從三個(gè)維度進(jìn)行切分: 可變與不可變集合(Immutable and mutable coll...
    時(shí)待吾閱讀 5,823評論 0 4
  • 1镜会、方法的定義//def用來表示定義一個(gè)方法,m1表示方法名终抽,(x:Int,y:Int)是參數(shù)列表(參數(shù)名:參數(shù)類...
    printf200閱讀 332評論 0 0
  • 第四天 數(shù)組【悟空教程】 第04天 Java基礎(chǔ) 第1章數(shù)組 1.1數(shù)組概念 軟件的基本功能是處理數(shù)據(jù)戳表,而在處理數(shù)...
    Java幫幫閱讀 1,599評論 0 9