列表 List
類似于數(shù)組
- 創(chuàng)建列表
val list = List(2, 3, 4, 5)
//創(chuàng)建空的列表
val list1 = Nil
val list2 = List()
val list3 = 1 :: 2 :: Nil
- 獲取元素,下標(biāo)也從0開始
list(0)
- 統(tǒng)計(jì)特定的元素的個(gè)數(shù)
//統(tǒng)計(jì)List中元素大于2的個(gè)數(shù)
list.count(x => x > 2)
統(tǒng)計(jì)其中字符串的長(zhǎng)度大于2的元素的個(gè)數(shù)
val tempList = "1" :: "hello" :: "test" :: Nil
tempList.count(s=>s.length > 2)
- 獲得列表的長(zhǎng)度
list.length
- 生成用指定符號(hào)隔開的字符串
list.mkString(":")
list.mkString(",")
- 反序生成列表
list.reverse
- 排序
sortWith
val sortList = List(2,4,4,5,65)
//降序
sortList.sortWith((x: Int, y: Int) => x > y)
//升序
sortList.sortWith((x: Int, y: Int) => x < y)
- 打印每一個(gè)元素
list.foreach((x)=>println(x))
//或者
list.foreach(println _)
集合
val set = Set(1,2,1)
元組
val hostPort = ("localhost",80)
hostPort._1
hostPort._2
Map
val map = Map("1"->"2")
val map = Map(("1"->"2"))
map.get("1")
//如果取不到值排截,在java中肯定會(huì)報(bào)錯(cuò)柠逞,但是在這我們可以規(guī)避莉撇,給定一個(gè)default值
map.getOrElse("2",3)
函數(shù)組合子
- Map
對(duì)列表中的每個(gè)元素應(yīng)用一個(gè)函數(shù)拌消,返回應(yīng)用后的元素所組成的列表。
list.map((i: Int) => i + 2)
//傳入一個(gè)函數(shù)
def add(i: Int): Int = i + 2
list.map(add)
- filter
移除任何對(duì)傳入函數(shù)計(jì)算結(jié)果為false的元素集晚。返回一個(gè)布爾值的函數(shù)通常被稱為謂詞函數(shù)[或判定函數(shù)]。
list.filter((i: Int) => i % 2 == 0)
- zip拉練操作
將兩個(gè)列表的內(nèi)容聚合到一個(gè)對(duì)偶列表中坎拐。
List(1,2,3).zip(List("a","b","c"))
- partition
將使用給定的謂詞函數(shù)分割列表担忧。
val testList = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
testList.partition(_ % 2 == 0)
- find
find返回集合中第一個(gè)匹配謂詞函數(shù)的元素芹缔。
testList.find((x: Int) => x > 3)
- foldLeft
將上次的計(jì)算結(jié)果重新賦值,然后與下一個(gè)元素進(jìn)行累計(jì)瓶盛。
testList.foldLeft(0) {
(m: Int, n: Int) => m + n
}
我們可以觀察一下這個(gè)過程最欠。
testList.foldLeft(0) {
(m: Int, n: Int) => println("m: " + m + " n: " + n); m + n
}
- flatten
將嵌套結(jié)構(gòu)扁平化為一個(gè)層次的集合。
List(List(1,2),List(3,4)).flatten
- flatMap
一個(gè)處理嵌套列表的函數(shù)惩猫,然后將結(jié)果串連起來芝硬。
val nestedList = List(List(1,2),List(3,4))
nestedList.flatMap(x=>x.map(_ * 2))