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