2.0 查找

利用迭代器查找,如果找到返回该元素的Option,如果没有返回None

  1. @Test
  2. def test11(): Unit = {
  3. val ints: Array[Int] = Array(1, 27, 301)
  4. val maybeInt: Option[Int] = ints.find(item => item % 2 == 0)
  5. if (maybeInt.nonEmpty) {
  6. println("有值")
  7. println(maybeInt)
  8. } else {
  9. println("无值")
  10. }
  11. }

image.png

2.1 过滤

返回ture的时候过滤掉,并返回一个新的集合

  1. object Test01_Demo {
  2. def main(args: Array[String]): Unit = {
  3. var list = List(1,99,3,8,2,6)
  4. // 1 过滤
  5. val value: List[Int] = list.filter(item => item % 2 == 0)
  6. println(value)
  7. }
  8. }

image.png

2.2 映射

集合中的每一个元素 转成 所想要的元素 并返回一个新的集合

  1. object Test01_Demo {
  2. def main(args: Array[String]): Unit = {
  3. var list = List(1,99,3,8,2,6)
  4. // 2 映射
  5. val value1 = list.map(item => item * item)
  6. println(value1)
  7. }
  8. }

image.png

2.3 扁平化

二维集合 转成 一维集合

  1. object Test01_Demo {
  2. def main(args: Array[String]): Unit = {
  3. // 3 扁平化
  4. val list2 = List(List(1,2),List(3,4),List(5,6))
  5. val flatten = list2.flatten
  6. println(flatten)
  7. }
  8. }

image.png

2.4 映射 扁平化

将Map集合映射成二维集合,再将二维集合 转成 一维集合

  1. object Test01_Demo {
  2. def main(args: Array[String]): Unit = {
  3. // 4 映射+扁平化
  4. val list3 = List("a xixi","b haha","c xixi" )
  5. val value2: List[Array[String]] = list3.map(item => item.split(" "))
  6. val flatten1: List[String] = value2.flatten
  7. println(flatten1)
  8. val value3: List[String] = list3.flatMap(item => item.split(" "))
  9. println(value3)
  10. }
  11. }

image.png

2.5 分组

list.groupBy(item => item % 2 == 0) 返回值作为 组名,符合条件进入该组(相同组名)

  1. object Test01_Demo {
  2. def main(args: Array[String]): Unit = {
  3. var list = List(1,99,3,8,2,6)
  4. // 5 分组
  5. val value4: Map[Boolean, List[Int]] = list.groupBy(item => item % 2 == 0) // 奇偶分组
  6. println(value4)
  7. for(key:Boolean <- value4.keys){
  8. println(s"$key ==> ${value4(key)}")
  9. }
  10. }
  11. }

image.png

  1. object Test01_Demo {
  2. def main(args: Array[String]): Unit = {
  3. // 5 分组
  4. val value4: Map[Boolean, List[Int]] = list.groupBy(item => item % 2 == 0) // 奇偶分组
  5. /*println(value4)
  6. for(key:Boolean <- value4.keys){
  7. println(s"$key ==> ${value4(key)}")
  8. }*/
  9. val list4 = List("xixi","haha","hadoop","hbase","hive","spark","flink")
  10. val value5: Map[Char, List[String]] = list4.groupBy(item => item.charAt(0))
  11. println(value5)
  12. for (key:Char <- value5.keys){
  13. println(s"$key ===> ${value5(key)}")
  14. }
  15. }
  16. }

image.png

2.6 Reduce

(A1,A1)=> A1

2.6.1 从左往右

  1. val res = list.reduce((a,b)=> a+b)
  2. val res = list.reduceLeft((a,b)=> a+b)

image.png

2.6.2 从右往左

  1. val res = list.reduceRight((a,b)=> a-b) // 1 - ( 3 - ( 54 - 77 ) )

image.png
image.png

2.7 fold(折叠)

有初始值的Reduce

2.7.1 从左往右

  1. list.foldLeft(initValue)((a,b)=> a+b)

image.png

2.7.2 从右往左

  1. val list = List(1,3,54,77)
  2. val res = list.foldRight(10)((a, b) => a - b) // 1 - ( 3 - (54 - ( 77 - 10 ) ))
  3. println(res) // -15

Reduce和Fold的异同

  • 都是规约聚合
  • Fold可以指定一个初值进行聚合,而Reduce是集合中的第一个或者最后一个当做初值