> 文章列表 > 尚硅谷大数据技术Scala教程-笔记04【集合】

尚硅谷大数据技术Scala教程-笔记04【集合】

尚硅谷大数据技术Scala教程-笔记04【集合】

视频地址:硅谷大数据技术之Scala入门到精通教程(小白快速上手scala)_哔哩哔哩_bilibili

  1. 尚硅谷大数据技术Scala教程-笔记01【Scala课程简介、Scala入门、变量和数据类型、运算符、流程控制】
  2. 尚硅谷大数据技术Scala教程-笔记02【函数式编程】
  3. 尚硅谷大数据技术Scala教程-笔记03【面向对象】
  4. 尚硅谷大数据技术Scala教程-笔记04【集合】
  5. 尚硅谷大数据技术Scala教程-笔记05【模式匹配、异常】

目录

第07章-集合

P091【091_尚硅谷_Scala_集合(一)_集合类型系统】22:36

P092【092_尚硅谷_Scala_集合(二)_数组(一)_不可变数组(一)_创建数组】09:37

P093【093_尚硅谷_Scala_集合(二)_数组(一)_不可变数组(二)_访问和修改元素】08:07

P094【094_尚硅谷_Scala_集合(二)_数组(一)_不可变数组(三)_遍历数组】12:26

P095【095_尚硅谷_Scala_集合(二)_数组(一)_不可变数组(四)_添加元素】10:19

P096【096_尚硅谷_Scala_集合(二)_数组(二)_可变数组(一)_创建数组】07:45

P097【097_尚硅谷_Scala_集合(二)_数组(二)_可变数组(二)_访问数组元素】01:49

P098【098_尚硅谷_Scala_集合(二)_数组(二)_可变数组(三)_添加元素】14:31

P099【099_尚硅谷_Scala_集合(二)_数组(二)_可变数组(四)_删除元素】03:09

P100【100_尚硅谷_Scala_集合(二)_数组(三)_可变数组与不可变数组的转化】05:14

P101【101_尚硅谷_Scala_集合(二)_数组(四)_多维数组】11:44

P102【102_尚硅谷_Scala_集合(三)_列表(一)_不可变列表(一)_创建列表】07:32

P103【103_尚硅谷_Scala_集合(三)_列表(一)_不可变列表(二)_访问和遍历元素】02:46

P104【104_尚硅谷_Scala_集合(三)_列表(一)_不可变列表(三)_添加元素】09:12

P105【105_尚硅谷_Scala_集合(三)_列表(一)_不可变列表(四)_合并列表】04:52

P106【106_尚硅谷_Scala_集合(三)_列表(二)_可变列表】12:33

P107【107_尚硅谷_Scala_集合(四)_Set集合(一)_不可变Set】09:23

P108【108_尚硅谷_Scala_集合(四)_Set集合(二)_可变Set】12:32

P109【109_尚硅谷_Scala_集合(五)_Map集合(一)_不可变Map】17:06

P110【110_尚硅谷_Scala_集合(五)_Map集合(二)_可变Map】17:15

P111【111_尚硅谷_Scala_集合(六)_元组】13:21

P112【112_尚硅谷_Scala_集合(七)_集合常用函数(一)_通用属性和操作】07:22

P113【113_尚硅谷_Scala_集合(七)_集合常用函数(二)_衍生集合(一)_单一集合操作】10:42

P114【114_尚硅谷_Scala_集合(七)_集合常用函数(二)_衍生集合(二)_两个集合操作】15:30

P115【115_尚硅谷_Scala_集合(七)_集合常用函数(三)_简单计算函数】20:22

P116【116_尚硅谷_Scala_集合(七)_集合常用函数(四)_高级计算函数(一)_简介】05:50

P117【117_尚硅谷_Scala_集合(七)_集合常用函数(四)_高级计算函数(二)_集合转换操作(Map类)】23:45

P118【118_尚硅谷_Scala_集合(七)_集合常用函数(四)_高级计算函数(三)_集合转换操作(Reduce)】11:25

P119【119_尚硅谷_Scala_集合(七)_集合常用函数(四)_高级计算函数(四)_集合转换操作(Fold)】10:43

P120【120_尚硅谷_Scala_集合(七)_集合常用函数(五)_应用案例(一)_合并Map】10:38

P121【121_尚硅谷_Scala_集合(七)_集合常用函数(五)_应用案例(二)_普通WordCount】12:21

P122【122_尚硅谷_Scala_集合(七)_集合常用函数(五)_应用案例(三)_复杂WordCount】22:35

P123【123_尚硅谷_Scala_集合(八)_队列Queue】07:47

P124【124_尚硅谷_Scala_集合(九)_并行集合】04:40


第07章-集合

P091【091_尚硅谷_Scala_集合(一)_集合类型系统】22:36

7.1 集合简介

7.1.1 不可变集合继承图

7.1.2     可变集合继承图

  1. Scala 的集合有三大类:序列 Seq、集 Set、映射 Map,所有的集合都扩展自Iterable特质。
  2. 对于几乎所有的集合类,Scala 都同时提供了可变不可变的版本,分别位于以下两个包
    1.        不可变集合:scala.collection.immutable
    2.         可变集合:  scala.collection.mutable
  3. Scala 不可变集合,就是指该集合对象不可修改,每次修改就会返回一个新对象,而不会对原对象进行修改。类似于 java 中的 String 对象
  4. 可变集合,就是这个集合可以直接对原对象进行修改,而不会返回新的对象,类似于 java 中 StringBuilder 对象。

不可变集合继承图

P092【092_尚硅谷_Scala_集合(二)_数组(一)_不可变数组(一)_创建数组】09:37

package chapter07object Test01_ImmutableArray {def main(args: Array[String]): Unit = {// 1. 创建数组val arr: Array[Int] = new Array[Int](5)// 另一种创建方式val arr2 = Array(12, 37, 42, 58, 97)//省略.apply()方法,apply底层自动调用println(arr)}
}

P093【093_尚硅谷_Scala_集合(二)_数组(一)_不可变数组(二)_访问和修改元素】08:07

package chapter07object Test01_ImmutableArray {def main(args: Array[String]): Unit = {// 1. 创建数组val arr: Array[Int] = new Array[Int](5)// 另一种创建方式val arr2 = Array(12, 37, 42, 58, 97)//省略.apply()方法,apply底层自动调用println(arr)// 2. 访问元素println(arr(0))println(arr(1))println(arr(4))//println(arr(5))arr(0) = 12arr(4) = 57println(arr(0))println(arr(1))println(arr(4))}
}

P094【094_尚硅谷_Scala_集合(二)_数组(一)_不可变数组(三)_遍历数组】12:26

    // 3. 数组的遍历// 1) 普通for循环for (i <- 0 until arr.length) {println(arr(i))}for (i <- arr.indices) println(arr(i))println("---------------------")// 2) 直接遍历所有元素,增强for循环for (elem <- arr2) println(elem)println("---------------------")// 3) 迭代器val iter = arr2.iteratorwhile (iter.hasNext)println(iter.next())println("---------------------")// 4) 调用foreach方法arr2.foreach((elem: Int) => println(elem))arr.foreach(println)println(arr2.mkString("--"))

P095【095_尚硅谷_Scala_集合(二)_数组(一)_不可变数组(四)_添加元素】10:19

    // 4. 添加元素val newArr = arr2.:+(73)println(arr2.mkString("--"))println(newArr.mkString("--"))val newArr2 = newArr.+:(30)println(newArr2.mkString("--"))val newArr3 = newArr2 :+ 15val newArr4 = 19 +: 29 +: newArr3 :+ 26 :+ 73println(newArr4.mkString(", "))

P096【096_尚硅谷_Scala_集合(二)_数组(二)_可变数组(一)_创建数组】07:45

package chapter07import scala.collection.mutable
import scala.collection.mutable.ArrayBufferobject Test02_ArrayBuffer {def main(args: Array[String]): Unit = {// 1. 创建可变数组val arr1: ArrayBuffer[Int] = new ArrayBuffer[Int]()val arr2 = ArrayBuffer(23, 57, 92)println(arr1)println(arr2)}
}

P097【097_尚硅谷_Scala_集合(二)_数组(二)_可变数组(二)_访问数组元素】01:49

package chapter07import scala.collection.mutable
import scala.collection.mutable.ArrayBufferobject Test02_ArrayBuffer {def main(args: Array[String]): Unit = {// 1. 创建可变数组val arr1: ArrayBuffer[Int] = new ArrayBuffer[Int]()val arr2 = ArrayBuffer(23, 57, 92)println(arr1)println(arr2)// 2. 访问元素// println(arr1(0)) // errorprintln(arr2(1))arr2(1) = 39println(arr2(1))}
}

P098【098_尚硅谷_Scala_集合(二)_数组(二)_可变数组(三)_添加元素】14:31

    // 3. 添加元素val newArr1 = arr1 :+ 15println(arr1)println(newArr1)println(arr1 == newArr1)val newArr2 = arr1 += 19println(arr1)println(newArr2)println(arr1 == newArr2)newArr2 += 13println(arr1)77 +=: arr1println(arr1)println(newArr2)arr1.append(36)arr1.prepend(11, 76)arr1.insert(1, 13, 59)println(arr1)arr1.insertAll(2, newArr1)arr1.prependAll(newArr2)println(arr1)

P099【099_尚硅谷_Scala_集合(二)_数组(二)_可变数组(四)_删除元素】03:09

    // 4. 删除元素arr1.remove(3)println(arr1)arr1.remove(0, 10)println(arr1)arr1 -= 13println(arr1)

P100【100_尚硅谷_Scala_集合(二)_数组(三)_可变数组与不可变数组的转化】05:14

    // 5. 可变数组转换为不可变数组val arr: ArrayBuffer[Int] = ArrayBuffer(23, 56, 98)val newArr: Array[Int] = arr.toArrayprintln(newArr.mkString(", "))println(arr)// 6. 不可变数组转换为可变数组val buffer: mutable.Buffer[Int] = newArr.toBufferprintln(buffer)println(newArr)

P101【101_尚硅谷_Scala_集合(二)_数组(四)_多维数组】11:44

package chapter07object Test03_MulArray {def main(args: Array[String]): Unit = {// 1. 创建二维数组val array: Array[Array[Int]] = Array.ofDim[Int](2, 3)// 2. 访问元素array(0)(2) = 19array(1)(0) = 25println(array.mkString(", "))for (i <- 0 until array.length; j <- 0 until array(i).length) {println(array(i)(j))}for (i <- array.indices; j <- array(i).indices) {print(array(i)(j) + "\\t")if (j == array(i).length - 1) println()}array.foreach(line => line.foreach(println))array.foreach(_.foreach(println))//简写}
}

P102【102_尚硅谷_Scala_集合(三)_列表(一)_不可变列表(一)_创建列表】07:32

package chapter07object Test04_List {def main(args: Array[String]): Unit = {// 1. 创建一个Listval list1 = List(23, 65, 87)println(list1)}
}

P103【103_尚硅谷_Scala_集合(三)_列表(一)_不可变列表(二)_访问和遍历元素】02:46

    // 1. 创建一个Listval list1 = List(23, 65, 87)println(list1)// 2. 访问和遍历元素println(list1(1))// list1(1) = 12list1.foreach(println)

P104【104_尚硅谷_Scala_集合(三)_列表(一)_不可变列表(三)_添加元素】09:12

    // 3. 添加元素val list2 = 10 +: list1val list3 = list1 :+ 23println(list1)println(list2)println(list3)println("==================")val list4 = list2.::(51)println(list4)val list5 = Nil.::(13)println(list5)val list6 = 73 :: 32 :: Nilval list7 = 17 :: 28 :: 59 :: 16 :: Nilprintln(list7)

P105【105_尚硅谷_Scala_集合(三)_列表(一)_不可变列表(四)_合并列表】04:52

    // 4. 合并列表val list8 = list6 :: list7println(list8)val list9 = list6 ::: list7println(list9)val list10 = list6 ++ list7println(list10)

P106【106_尚硅谷_Scala_集合(三)_列表(二)_可变列表】12:33

package chapter07import scala.collection.mutable.ListBufferobject Test05_ListBuffer {def main(args: Array[String]): Unit = {// 1. 创建可变列表val list1: ListBuffer[Int] = new ListBuffer[Int]()val list2 = ListBuffer(12, 53, 75)println(list1)println(list2)println("==============")// 2. 添加元素list1.append(15, 62)list2.prepend(20)list1.insert(1, 19, 22)println(list1)println(list2)println("==============")31 +=: 96 +=: list1 += 25 += 11println(list1)println("==============")// 3. 合并listval list3 = list1 ++ list2println(list1)println(list2)println("==============")list1 ++=: list2println(list1)println(list2)println("==============")// 4. 修改元素list2(3) = 30list2.update(0, 89)println(list2)// 5. 删除元素list2.remove(2)list2 -= 25println(list2)}
}

P107【107_尚硅谷_Scala_集合(四)_Set集合(一)_不可变Set】09:23

package chapter07object Test06_ImmutableSet {def main(args: Array[String]): Unit = {// 1. 创建setval set1 = Set(13, 23, 53, 12, 13, 23, 78)println(set1)println("==================")// 2. 添加元素val set2 = set1 + 129println(set1)println(set2)println("==================")// 3. 合并setval set3 = Set(19, 13, 23, 53, 67, 99)val set4 = set2 ++ set3println(set2)println(set3)println(set4)// 4. 删除元素val set5 = set3 - 13println(set3)println(set5)}
}

P108【108_尚硅谷_Scala_集合(四)_Set集合(二)_可变Set】12:32

package chapter07import scala.collection.mutableobject Test07_MutableSet {def main(args: Array[String]): Unit = {// 1. 创建setval set1: mutable.Set[Int] = mutable.Set(13, 23, 53, 12, 13, 23, 78)println(set1)println("==================")// 2. 添加元素val set2 = set1 + 11println(set1)println(set2)set1 += 11println(set1)val flag1 = set1.add(10)println(flag1)println(set1)val flag2 = set1.add(10)println(flag2)println(set1)println("==================")// 3. 删除元素set1 -= 11println(set1)val flag3 = set1.remove(10)println(flag3)println(set1)val flag4 = set1.remove(10)println(flag4)println(set1)println("==================")// 4. 合并两个Set//    val set3 =}
}

P109【109_尚硅谷_Scala_集合(五)_Map集合(一)_不可变Map】17:06

package chapter07object Test08_ImmutableMap {def main(args: Array[String]): Unit = {// 1. 创建mapval map1: Map[String, Int] = Map("a" -> 13, "b" -> 25, "hello" -> 3)println(map1)println(map1.getClass)println("==========================")// 2. 遍历元素map1.foreach(println)map1.foreach((kv: (String, Int)) => println(kv))println("============================")// 3. 取map中所有的key 或者 valuefor (key <- map1.keys) {println(s"$key ---> ${map1.get(key)}")}// 4. 访问某一个key的valueprintln("a: " + map1.get("a").get)println("c: " + map1.get("c"))println("c: " + map1.getOrElse("c", 0))println(map1("a"))}
}

P110【110_尚硅谷_Scala_集合(五)_Map集合(二)_可变Map】17:15

package chapter07import scala.collection.mutableobject Test09_MutableMap {def main(args: Array[String]): Unit = {// 1. 创建mapval map1: mutable.Map[String, Int] = mutable.Map("a" -> 13, "b" -> 25, "hello" -> 3)println(map1)println(map1.getClass)println("==========================")// 2. 添加元素map1.put("c", 5)map1.put("d", 9)println(map1)map1 += (("e", 7))println(map1)println("====================")// 3. 删除元素println(map1("c"))map1.remove("c")println(map1.getOrElse("c", 0))map1 -= "d"println(map1)println("====================")// 4. 修改元素map1.update("c", 5)map1.update("e", 10)println(map1)println("====================")// 5. 合并两个Mapval map2: Map[String, Int] = Map("aaa" -> 11, "b" -> 29, "hello" -> 5)//    map1 ++= map2println(map1)println(map2)println("---------------------------")val map3: Map[String, Int] = map2 ++ map1println(map1)println(map2)println(map3)}
}

P111【111_尚硅谷_Scala_集合(六)_元组】13:21

package chapter07object Test10_Tuple {def main(args: Array[String]): Unit = {// 1. 创建元组val tuple: (String, Int, Char, Boolean) = ("hello", 100, 'a', true)println(tuple)// 2. 访问数据println(tuple._1)println(tuple._2)println(tuple._3)println(tuple._4)println(tuple.productElement(1))println("====================")// 3. 遍历元组数据for (elem <- tuple.productIterator)println(elem)// 4. 嵌套元组val mulTuple = (12, 0.3, "hello", (23, "scala"), 29)println(mulTuple._4._2)}
}

P112【112_尚硅谷_Scala_集合(七)_集合常用函数(一)_通用属性和操作】07:22

package chapter07object Test11_CommonOp {def main(args: Array[String]): Unit = {val list = List(1, 3, 5, 7, 2, 89)val set = Set(23, 34, 423, 75)//(1)获取集合长度println(list.length)//(2)获取集合大小println(set.size)//(3)循环遍历for (elem <- list)println(elem)set.foreach(println)//(4)迭代器for (elem <- list.iterator) println(elem)println("====================")//(5)生成字符串println(list)println(set)println(list.mkString("--"))//(6)是否包含println(list.contains(23))println(set.contains(23))}
}

P113【113_尚硅谷_Scala_集合(七)_集合常用函数(二)_衍生集合(一)_单一集合操作】10:42

P114【114_尚硅谷_Scala_集合(七)_集合常用函数(二)_衍生集合(二)_两个集合操作】15:30

D:\\Java\\jdk1.8\\jdk1.8.0_201\\bin\\java.exe ...
1
List(3, 5, 7, 2, 89)
19
List(3, 7, 2, 45, 4, 8)
List(89, 2, 7, 5, 3, 1)
List(1, 3, 5)
List(5, 7, 2, 89)
List(7, 2, 89)
List(1, 3)
=========================
union: List(1, 3, 5, 7, 2, 89, 3, 7, 2, 45, 4, 8, 19)
List(1, 3, 5, 7, 2, 89, 3, 7, 2, 45, 4, 8, 19)
union2: Set(5, 89, 1, 2, 45, 7, 3, 8, 19, 4)
Set(5, 89, 1, 2, 45, 7, 3, 8, 19, 4)
-----------------------
intersection: List(3, 7, 2)
-----------------------
diff1: List(1, 5, 89)
diff2: List(45, 4, 8, 19)
-----------------------
zip: List((1,3), (3,7), (5,2), (7,45), (2,4), (89,8))
zip: List((3,1), (7,3), (2,5), (45,7), (4,2), (8,89))
-----------------------
List(1, 3, 5)
List(3, 5, 7)
List(5, 7, 2)
List(7, 2, 89)
-----------------------
List(3, 7, 2, 45)
List(2, 45, 4, 8)
List(4, 8, 19)
-----------------------
List(3, 7, 2)
List(45, 4, 8)
List(19)

Process finished with exit code 0

package chapter07object Test12_DerivedCollection {def main(args: Array[String]): Unit = {val list1 = List(1, 3, 5, 7, 2, 89)val list2 = List(3, 7, 2, 45, 4, 8, 19)//    (1)获取集合的头println(list1.head)//    (2)获取集合的尾(不是头的就是尾)println(list1.tail)//    (3)集合最后一个数据println(list2.last)//    (4)集合初始数据(不包含最后一个)println(list2.init)//    (5)反转println(list1.reverse)//    (6)取前(后)n个元素println(list1.take(3))println(list1.takeRight(4))//    (7)去掉前(后)n个元素println(list1.drop(3))println(list1.dropRight(4))println("=========================")//    (8)并集val union = list1.union(list2)println("union: " + union)println(list1 ::: list2)// 如果是set做并集,会去重val set1 = Set(1, 3, 5, 7, 2, 89)val set2 = Set(3, 7, 2, 45, 4, 8, 19)val union2 = set1.union(set2)println("union2: " + union2)println(set1 ++ set2)println("-----------------------")//    (9)交集val intersection = list1.intersect(list2)println("intersection: " + intersection)println("-----------------------")//    (10)差集val diff1 = list1.diff(list2)val diff2 = list2.diff(list1)println("diff1: " + diff1)println("diff2: " + diff2)println("-----------------------")//    (11)拉链println("zip: " + list1.zip(list2))println("zip: " + list2.zip(list1))println("-----------------------")//    (12)滑窗for (elem <- list1.sliding(3))println(elem)println("-----------------------")for (elem <- list2.sliding(4, 2))println(elem)println("-----------------------")for (elem <- list2.sliding(3, 3))println(elem)}
}

P115【115_尚硅谷_Scala_集合(七)_集合常用函数(三)_简单计算函数】20:22

package chapter07object Test13_SimpleFunction {def main(args: Array[String]): Unit = {val list = List(5, 1, 8, 2, -3, 4)val list2 = List(("a", 5), ("b", 1), ("c", 8), ("d", 2), ("e", -3), ("f", 4))//(1)求和var sum = 0for (elem <- list) {sum += elem}println(sum)println(list.sum)//(2)求乘积println(list.product)//(3)最大值println(list.max)println(list2.maxBy((tuple: (String, Int)) => tuple._2))println(list2.maxBy(_._2))//(4)最小值println(list.min)println(list2.minBy(_._2))println("========================")//(5)排序//5.1 sortedval sortedList = list.sortedprintln(sortedList)//从大到小逆序排序println(list.sorted.reverse)//传入隐式参数println(list.sorted(Ordering[Int].reverse))println(list2.sorted)//5.2 sortByprintln(list2.sortBy(_._2))println(list2.sortBy(_._2)(Ordering[Int].reverse))//5.3 sortWithprintln(list.sortWith((a: Int, b: Int) => {a < b}))println(list.sortWith(_ < _))println(list.sortWith(_ > _))}
}

P116【116_尚硅谷_Scala_集合(七)_集合常用函数(四)_高级计算函数(一)_简介】05:50

7.7.4 集合计算高级函数-说明

  1. 过滤:遍历一个集合并从中获取满足指定条件的元素组成一个新的集合。
  2. 转化/映射(map):将集合中的每一个元素映射到某一个函数。
  3. 扁平化
  4. 扁平化+映射,注:flatMap相当于先进行map操作,在进行flatten操作。集合中的每个元素的子元素映射到某个函数并返回新集合。
  5. 分组(group)  :按照指定的规则对集合的元素进行分组。
  6. 简化(归约)
  7. 折叠

P117【117_尚硅谷_Scala_集合(七)_集合常用函数(四)_高级计算函数(二)_集合转换操作(Map类)】23:45

package chapter07object Test14_HighLevelFunction_Map {def main(args: Array[String]): Unit = {val list = List(1, 2, 3, 4, 5, 6, 7, 8, 9)// 1. 过滤// 选取偶数val evenList = list.filter((elem: Int) => {elem % 2 == 0})println(evenList)// 选取奇数println(list.filter(_ % 2 == 1))println("=======================")// 2. 映射map// 把集合中每个数乘2println(list.map(_ * 2))println(list.map(x => x * x))println("=======================")// 3. 扁平化val nestedList: List[List[Int]] = List(List(1, 2, 3), List(4, 5), List(6, 7, 8, 9))val flatList = nestedList(0) ::: nestedList(1) ::: nestedList(2)println(flatList)val flatList2 = nestedList.flattenprintln(flatList2)println("=======================")// 4. 扁平映射// 将一组字符串进行分词,并保存成单词的列表val strings: List[String] = List("hello world", "hello scala", "hello java", "we study")val splitList: List[Array[String]] = strings.map(_.split(" ")) // 分词val flattenList = splitList.flatten // 打散扁平化println(flattenList)val flatmapList = strings.flatMap(_.split(" "))println(flatmapList)println("========================")// 5. 分组groupBy// 分成奇偶两组val groupMap: Map[Int, List[Int]] = list.groupBy(_ % 2)val groupMap2: Map[String, List[Int]] = list.groupBy(data => if (data % 2 == 0) "偶数" else "奇数")println(groupMap)println(groupMap2)// 给定一组词汇,按照单词的首字母进行分组val wordList = List("china", "america", "alice", "canada", "cary", "bob", "japan")println(wordList.groupBy(_.charAt(0)))}
}

P118【118_尚硅谷_Scala_集合(七)_集合常用函数(四)_高级计算函数(三)_集合转换操作(Reduce)】11:25

package chapter07object Test15_HighLevelFunction_Reduce {def main(args: Array[String]): Unit = {val list = List(1, 2, 3, 4)// 1. reduceprintln(list.reduce(_ + _))println(list.reduceLeft(_ + _))println(list.reduceRight(_ + _))println("===========================")val list2 = List(3, 4, 5, 8, 10)println(list2.reduce(_ - _)) // -24println(list2.reduceLeft(_ - _))println(list2.reduceRight(_ - _)) // 3 - (4 - (5 - (8 - 10))), 6}
}

P119【119_尚硅谷_Scala_集合(七)_集合常用函数(四)_高级计算函数(四)_集合转换操作(Fold)】10:43

    // 2. foldprintln(list.fold(10)(_ + _)) // 10 + 1 + 2 + 3 + 4,20println(list.foldLeft(10)(_ - _)) // 10 - 1 - 2 - 3 - 4,0println(list2.foldRight(11)(_ - _)) // 3 - (4 - (5 - (8 - (10 - 11)))),-5

P120【120_尚硅谷_Scala_集合(七)_集合常用函数(五)_应用案例(一)_合并Map】10:38

package chapter07import scala.collection.mutableobject Test16_MergeMap {def main(args: Array[String]): Unit = {val map1 = Map("a" -> 1, "b" -> 3, "c" -> 6)val map2 = mutable.Map("a" -> 6, "b" -> 2, "c" -> 9, "d" -> 3)// println(map1 ++ map2)val map3 = map1.foldLeft(map2)((mergedMap, kv) => {val key = kv._1val value = kv._2mergedMap(key) = mergedMap.getOrElse(key, 0) + valuemergedMap})println(map3)}
}

P121【121_尚硅谷_Scala_集合(七)_集合常用函数(五)_应用案例(二)_普通WordCount】12:21

package chapter07object Test17_CommonWordCount {def main(args: Array[String]): Unit = {val stringList: List[String] = List("hello","hello world","hello scala","hello spark from scala","hello flink from scala")// 1. 对字符串进行切分,得到一个打散所有单词的列表//val wordList1: List[Array[String]] = stringList.map(_.split(" "))//val wordList2: List[String] = wordList1.flatten//println(wordList2)val wordList = stringList.flatMap(_.split(" "))println(wordList)// 2. 相同的单词进行分组val groupMap: Map[String, List[String]] = wordList.groupBy(word => word)println(groupMap)// 3. 对分组之后的list取长度,得到每个单词的个数val countMap: Map[String, Int] = groupMap.map(kv => (kv._1, kv._2.length))// 4. 将map转换为list,并排序取前3val sortList: List[(String, Int)] = countMap.toList.sortWith(_._2 > _._2).take(3)println(sortList)}
}

P122【122_尚硅谷_Scala_集合(七)_集合常用函数(五)_应用案例(三)_复杂WordCount】22:35

package chapter07object Test18_ComplexWordCount {def main(args: Array[String]): Unit = {val tupleList: List[(String, Int)] = List(("hello", 1),("hello world", 2),("hello scala", 3),("hello spark from scala", 1),("hello flink from scala", 2))// 思路一:直接展开为普通版本val newStringList: List[String] = tupleList.map(kv => {(kv._1.trim + " ") * kv._2})println(newStringList)// 接下来操作与普通版本完全一致val wordCountList: List[(String, Int)] = newStringList.flatMap(_.split(" ")) // 空格分词.groupBy(word => word) // 按照单词分组.map(kv => (kv._1, kv._2.size)) // 统计出每个单词的个数.toList.sortBy(_._2)(Ordering[Int].reverse).take(3)println(wordCountList)println("================================")// 思路二:直接基于预统计的结果进行转换// 1. 将字符串打散为单词,并结合对应的个数包装成二元组val preCountList: List[(String, Int)] = tupleList.flatMap(tuple => {val strings: Array[String] = tuple._1.split(" ")strings.map(word => (word, tuple._2))})println(preCountList)// 2. 对二元组按照单词进行分组val preCountMap: Map[String, List[(String, Int)]] = preCountList.groupBy(_._1)println(preCountMap)// 3. 叠加每个单词预统计的个数值val countMap: Map[String, Int] = preCountMap.mapValues(tupleList => tupleList.map(_._2).sum)println(countMap)// 4. 转换成list,排序取前3val countList = countMap.toList.sortWith(_._2 > _._2).take(3)println(countList)}
}

P123【123_尚硅谷_Scala_集合(八)_队列Queue】07:47

package chapter07import scala.collection.immutable.Queue
import scala.collection.mutable
import scala.collection.parallel.immutableobject Test19_Queue {def main(args: Array[String]): Unit = {// 创建一个可变队列val queue: mutable.Queue[String] = new mutable.Queue[String]()queue.enqueue("a", "b", "c")println(queue)println(queue.dequeue())println(queue)println(queue.dequeue())println(queue)queue.enqueue("d", "e")println(queue)println(queue.dequeue())println(queue)println("==========================")// 不可变队列val queue2: Queue[String] = Queue("a", "b", "c")val queue3 = queue2.enqueue("d")println(queue2)println(queue3)}
}

P124【124_尚硅谷_Scala_集合(九)_并行集合】04:40

package chapter07import scala.collection.immutable
import scala.collection.parallel.immutable.ParSeqobject Test20_Parallel {def main(args: Array[String]): Unit = {val result: immutable.IndexedSeq[Long] = (1 to 100).map(x => Thread.currentThread.getId)println(result)val result2: ParSeq[Long] = (1 to 100).par.map(x => Thread.currentThread.getId)println(result2)}
}