feat:ChatGPT第 8 课:flatMap 和嵌套集合。

This commit is contained in:
2026-09-14 14:23:23 +08:00
parent f750979b82
commit 9fe77af485
12 changed files with 274 additions and 0 deletions
@@ -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)
}
}
@@ -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)
}
}
@@ -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)
}
}
@@ -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)
}
}
@@ -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))) // 展开一层
}
}
@@ -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)
}
}
@@ -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)
}
}
@@ -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)
}
}
@@ -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)
}
}
@@ -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)
}
}
@@ -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)
}
}
@@ -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)
}
}