1. 程式人生 > >高階函數(上)

高階函數(上)

變量 int for take nta foreach 行操作 clas each

map

逐個操作集合中的元素,註意有別於Map

  • 先定義一個集合
val l = List(1,2,3,4,5,6,7,8)
  • 逐個加1
// 匿名函數
l.map((x:Int)=>x+1) // (2,3,4,5,6,7,8,9)
  • 可以簡化參數類型
l.map((x) => x+1)       // scala自動推斷參數類型
  • 省略括號
// 當括號裏只有"一個"元素時,可以省略括號
l.map( x => x+1)
  • 使用占位符語法
l.map( _ + 1 )  // 每個元素+1

// 打印
l.map(_ + 1).foreach(println)

flatMap

對每個元素進行操作後,返回的不是新的元素,而是“容器”;

多個元素,自然就有了多個“容器”;

之後再把這“多個容器”拍扁,使之成為新的元素集合。

val l = List("Hadoop","Hive","Spark")
// List(H, A, D, O, O, P, H, I, V, E, S, P, A, R, K)
l flatMap (s => s.toUpperCase)

filter

過濾元素,只有滿足條件的元素才會被返回,滿足條件的元素形式一個新的容器

val l = List(1,2,3,4,5,6,7,8)
// 使用filter過濾
l.filter(_>5).foreach(println)  // 大於5
// 能被2整除
l filter (_%2==0)   // 有返回值,可賦予變量
// 包含某個元素(字符串中應用較多)
s filter (kv => kv._2 contains "xiamen")
// 取前幾個元素
println(l.take(3))

高階函數(上)