feat:ChatGPT第 8 课:flatMap 和嵌套集合。
This commit is contained in:
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user