diff --git a/src/main/scala/practise8/comprehensive/Comprehensive.scala b/src/main/scala/practise8/comprehensive/Comprehensive.scala new file mode 100644 index 0000000..3abbc36 --- /dev/null +++ b/src/main/scala/practise8/comprehensive/Comprehensive.scala @@ -0,0 +1,45 @@ +package practise8.comprehensive +/* +* 练习 6 ⭐⭐ 综合题 + +给: +val sentences = List( + "hello scala", + "hello spark", + "scala is fun" +) + +使用 flatMap 得到所有单词: +List( + hello, + scala, + hello, + spark, + scala, + is, + fun +) + +然后继续使用 filter: +只保留长度 >= 5 的单词 + +最终: +List(hello, scala, hello, spark, scala) + +要求尝试写成: +val result = sentences + .flatMap(...) + .filter(...)*/ + +object Comprehensive { + def main(args: Array[String]): Unit = { + val sentences = List( + "hello scala", + "hello spark", + "scala is fun" + ) + val result = sentences.flatMap(_.split(" ")) + .filter(_.length >= 5) + println(result) + } +} diff --git a/src/main/scala/practise8/demo/Demo1NestedCollection.scala b/src/main/scala/practise8/demo/Demo1NestedCollection.scala new file mode 100644 index 0000000..9a04d86 --- /dev/null +++ b/src/main/scala/practise8/demo/Demo1NestedCollection.scala @@ -0,0 +1,20 @@ +package practise8.demo + +/* +* 第 8 课:flatMap 和嵌套集合。 +* */ +object Demo1NestedCollection { + def main(args: Array[String]): Unit = { + val nums = List(1, 2, 3) // 普通集合 + + // 嵌套集合 + val nums2 = List( + List(1, 2), + List(3, 4), + List(5, 6) + ) + println(nums2) + + + } +} diff --git a/src/main/scala/practise8/demo/Demo2MapNested.scala b/src/main/scala/practise8/demo/Demo2MapNested.scala new file mode 100644 index 0000000..f656711 --- /dev/null +++ b/src/main/scala/practise8/demo/Demo2MapNested.scala @@ -0,0 +1,14 @@ +package practise8.demo + +/* +* map 产生嵌套集合*/ +object Demo2MapNested { + def main(args: Array[String]): Unit = { + // map 遇到嵌套集合会怎样? + val nums = List(1, 2, 3) + + val result = nums.map(x => List(x, x * 10)) // 每次返回的不是一个数字,而是一个 List。 + + println(result) + } +} diff --git a/src/main/scala/practise8/demo/Demo3FlatMap.scala b/src/main/scala/practise8/demo/Demo3FlatMap.scala new file mode 100644 index 0000000..fc55fd7 --- /dev/null +++ b/src/main/scala/practise8/demo/Demo3FlatMap.scala @@ -0,0 +1,12 @@ +package practise8.demo + +/* +* flatMap +* flatMap 可以粗略理解成:先 map,再把结果展开一层。*/ +object Demo3FlatMap { + def main(args: Array[String]): Unit = { + val nums = List(1, 2, 3) + val result = nums.flatMap(x => List(x, x * 10)) + println(result) + } +} diff --git a/src/main/scala/practise8/demo/Demo4MapVsFlatMap.scala b/src/main/scala/practise8/demo/Demo4MapVsFlatMap.scala new file mode 100644 index 0000000..6445ce8 --- /dev/null +++ b/src/main/scala/practise8/demo/Demo4MapVsFlatMap.scala @@ -0,0 +1,13 @@ +package practise8.demo + +/* +* map 和 flatMap 对比*/ +object Demo4MapVsFlatMap { + def main(args: Array[String]): Unit = { + val nums = List(1, 2, 3) + + println(nums.map(x => List(x, x + 10))) // 结构保持 + + println(nums.flatMap(x => List(x, x + 10))) // 展开一层 + } +} diff --git a/src/main/scala/practise8/demo/Demo5SplitFlatMap.scala b/src/main/scala/practise8/demo/Demo5SplitFlatMap.scala new file mode 100644 index 0000000..53ea8bf --- /dev/null +++ b/src/main/scala/practise8/demo/Demo5SplitFlatMap.scala @@ -0,0 +1,20 @@ +package practise8.demo + +/* +* split + flatMap 拆分字符串*/ +object Demo5SplitFlatMap { + def main(args: Array[String]): Unit = { + val sentences = List( + "hello scala", + "hello spark" + ) + + // 使用map + val result = sentences.map(x => x.split(" ").toList) + println(result) + + // 使用flatMap + val result2 = sentences.flatMap(x => x.split(" ")) + println(result2) + } +} diff --git a/src/main/scala/practise8/demo/Demo6WordsFlatMap.scala b/src/main/scala/practise8/demo/Demo6WordsFlatMap.scala new file mode 100644 index 0000000..1b276ee --- /dev/null +++ b/src/main/scala/practise8/demo/Demo6WordsFlatMap.scala @@ -0,0 +1,14 @@ +package practise8.demo + +/* +* map 和 flatMap 对比*/ +object Demo6WordsFlatMap { + def main(args: Array[String]): Unit = { + val words = List("a b", "c d") + val mapWords = words.map(_.split(" ").toList) + println(mapWords) + + val flatMapWords = words.flatMap(_.split(" ").toList) + println(flatMapWords) + } +} diff --git a/src/main/scala/practise8/exercises/Exercises1.scala b/src/main/scala/practise8/exercises/Exercises1.scala new file mode 100644 index 0000000..893e694 --- /dev/null +++ b/src/main/scala/practise8/exercises/Exercises1.scala @@ -0,0 +1,28 @@ +package practise8.exercises + +/* +* 练习 1:map 产生嵌套集合 + +给: +val nums = List(1, 2, 3) + +使用: +map + +让每个数字变成: +List(x, x * 10) + +最终结果: +List( + List(1,10), + List(2,20), + List(3,30) +) +* */ +object Exercises1 { + def main(args: Array[String]): Unit = { + val nums = List(1, 2, 3) + val result = nums.map(x => List(x, x * 10)) + println(result) + } +} diff --git a/src/main/scala/practise8/exercises/Exercises2.scala b/src/main/scala/practise8/exercises/Exercises2.scala new file mode 100644 index 0000000..6bf2ab7 --- /dev/null +++ b/src/main/scala/practise8/exercises/Exercises2.scala @@ -0,0 +1,21 @@ +package practise8.exercises + +/* +* 练习 2:flatMap + +还是: +val nums = List(1, 2, 3) + +使用 flatMap: +每个数字变成 List(x, x * 10) + +最终: +List(1,10,2,20,3,30) +* */ +object Exercises2 { + def main(args: Array[String]): Unit = { + val nums = List(1, 2, 3) + val result = nums.flatMap(x => List(x, x * 10)) + println(result) + } +} diff --git a/src/main/scala/practise8/exercises/Exercises3.scala b/src/main/scala/practise8/exercises/Exercises3.scala new file mode 100644 index 0000000..36daa60 --- /dev/null +++ b/src/main/scala/practise8/exercises/Exercises3.scala @@ -0,0 +1,24 @@ +package practise8.exercises + +/* +* 练习 3:平方展开 + +给: +val nums = List(1, 2, 3, 4) + +使用: +flatMap + +让每个数字变成: +List(x, x * x) + +最终: +List(1,1,2,4,3,9,4,16) +* */ +object Exercises3 { + def main(args: Array[String]): Unit = { + val nums = List(1, 2, 3, 4) + val result = nums.flatMap(x => List(x, x * x)) + println(result) + } +} diff --git a/src/main/scala/practise8/exercises/Exercises4.scala b/src/main/scala/practise8/exercises/Exercises4.scala new file mode 100644 index 0000000..6a86840 --- /dev/null +++ b/src/main/scala/practise8/exercises/Exercises4.scala @@ -0,0 +1,30 @@ +package practise8.exercises + +/* +* 练习 4:字符串拆分 + +给: +val sentences = List( + "hello scala", + "hello spark" +) + +使用: +flatMap + +将它拆成: +List(hello, scala, hello, spark) + +提示: +_.split(" ") +* */ +object Exercises4 { + def main(args: Array[String]): Unit = { + val sentences = List( + "hello scala", + "hello spark" + ) + val result = sentences.flatMap(_.split(" ")) + println(result) + } +} diff --git a/src/main/scala/practise8/exercises/Exercises5.scala b/src/main/scala/practise8/exercises/Exercises5.scala new file mode 100644 index 0000000..6df65af --- /dev/null +++ b/src/main/scala/practise8/exercises/Exercises5.scala @@ -0,0 +1,33 @@ +package practise8.exercises +/* +* 练习 5 ⭐ + +给: +val nums = List(1, 2, 3, 4, 5) + +使用 flatMap: +偶数 → 保留 +奇数 → 丢弃 +偶数 x → 生成 List(x, x * 10) + +最终: +List(2, 20, 4, 40) + +提示:这里可以利用: +if + +例如: +if (...) { + List(...) +} else { + List() +}*/ +object Exercises5 { + def main(args: Array[String]): Unit = { + val nums = List(1, 2, 3, 4, 5) + val result = nums + .filter(_ % 2 ==0) + .flatMap(x=>List(x,x*10)) + println(result) + } +}