feat:ChatGPT第 7 课:foreach、reduce、fold,开始学习“遍历”和“把多个元素聚合成一个结果

This commit is contained in:
2026-09-14 09:00:54 +08:00
parent a019745c81
commit 9fb97f548f
16 changed files with 317 additions and 0 deletions
@@ -0,0 +1,11 @@
package practise7.comprehensive
object Comprehensive {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val result = nums.filter(_ % 2 == 0)
.map(_ * 10)
.reduce(_ + _)
println(result)
}
}
+25
View File
@@ -0,0 +1,25 @@
package practise7.demo
/*
* 第 7 课:foreach、reduce、fold,开始学习“遍历”和“把多个元素聚合成一个结果
* 这一课很重要,因为前面:
*map
*filter
*主要是在“转换和筛选数据”。
*
*这一课开始学习:
*遍历数据
*↓
*执行某个操作
*
*多个数据
*↓
*逐步计算
*↓
*最终得到一个结果
*
*这也是后面学习 Spark 聚合操作的基础。
*/
object Demo {
}
@@ -0,0 +1,19 @@
package practise7.demo
/*
foreach 基本用法
*/
object Demo1Foreach {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5)
nums.foreach(x => println(x)) // 把 List 中的每一个元素依次交给这个函数。
/*
*1 → println(1)
*2 → println(2)
*3 → println(3)
*4 → println(4)
*5 → println(5)
*/
}
}
@@ -0,0 +1,17 @@
package practise7.demo
/*
foreach 和 map 区别
*/
object Demo2ForeachMap {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5)
val resultMap = nums.map(_ * 2)
// map👉处理每个元素👉产生一个新的集合
println(resultMap)
val resultForeach = nums.foreach(x => println(x))
// foreach👉处理每个元素👉执行某个动作👉通常不关心返回集合
println(resultForeach)
}
}
@@ -0,0 +1,13 @@
package practise7.demo
/*
foreach 也可以使用 _
*/
object Demo3ForeachUnderscore {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5)
println(nums.foreach(x => println(x)))
println(nums.foreach(println(_)))
println(nums.foreach(println))
}
}
@@ -0,0 +1,19 @@
package practise7.demo
/*
reduce:把多个元素变成一个结果
*/
object Demo4Reduce {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5)
val result = nums.reduce((a, b) => a + b)
// 不断把两个元素合并,最后得到一个结果。
println(result)
/*
1 + 2 = 3
3 + 3 = 6
6 + 4 = 10
10 + 5 = 15
*/
}
}
@@ -0,0 +1,11 @@
package practise7.demo
/*
* reduce(_ + _)
*/
object Demo5ReduceUnderscore {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5)
println(nums.reduce(_ + _))
}
}
@@ -0,0 +1,21 @@
package practise7.demo
/*
* reduceMax
* reduce是把集合中的元素按照某种规则不断合并成一个结果。
*/
object Demo6ReduceMax {
def main(args: Array[String]): Unit = {
val nums = List(10, 5, 30, 20)
val result = nums.reduce((a, b) => {
if (a > b) a else b
})
println(result)
// 也可以写成
val result2 = nums.reduce((a, b) => if (a > b) a else b)
println(result2)
}
}
@@ -0,0 +1,13 @@
package practise7.demo
/*
* fold 基本用法
* fold 可以提供一个初始值。
*/
object Demo7Fold {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5)
val result = nums.fold(5)(_ + _) // 5 + 1 + 2 + 3 + 4 + 5 = 20,初始值为5
println(result)
}
}
@@ -0,0 +1,12 @@
package practise7.demo
/*
* fold 也不只是求和
*/
object Demo8FoldMultiply {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5)
val result = nums.fold(2)(_ * _) // 2 * 1 * 2 * 3 * 4 * 5 = 240
println(result)
}
}
@@ -0,0 +1,27 @@
package practise7.exercises
/*
* 练习 1:foreach
val nums = List(1, 2, 3, 4, 5)
使用 foreach,依次打印:
1
2
3
4
5
尝试两种写法:
nums.foreach(x => println(x))
以及:
nums.foreach(println)
观察两者是否一样。
*/
object Exercises1 {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5)
nums.foreach(x => println(x))
nums.foreach(println)
}
}
@@ -0,0 +1,31 @@
package practise7.exercises
/*
练习 2:foreach + if
val nums = List(1, 2, 3, 4, 5, 6)
使用 foreach:
只打印偶数
结果:
2
4
6
提示:
if (x % 2 == 0) {
println(x)
}
*/
object Exercises2 {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5, 6)
val result = nums.foreach(x =>
if (x % 2 == 0) {
println(x)
}
)
println(result)
}
}
@@ -0,0 +1,25 @@
package practise7.exercises
/*
* 练习 3:reduce 求和
val nums = List(1, 2, 3, 4, 5)
使用:
reduce
得到:
15
要求尽量使用:
_
* */
object Exercises3 {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5)
val result = nums.reduce(_ + _)
println(result)
}
}
@@ -0,0 +1,20 @@
package practise7.exercises
/*
练习 4:reduce 求最大值
val nums = List(10, 20, 5, 30, 15)
使用 reduce 找出最大值:
30
这里可以继续使用:
if (a > b) a else b
*/
object Exercises4 {
def main(args: Array[String]): Unit = {
val nums = List(10, 20, 5, 30, 15)
val result = nums.reduce((a, b) => if (a > b) a else b)
println(result)
}
}
@@ -0,0 +1,22 @@
package practise7.exercises
/*
练习 5:fold 求和
val nums = List(1, 2, 3, 4, 5)
使用:
fold
并指定初始值:
0
最终得到:
15
*/
object Exercises5 {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5)
val result = nums.fold(0)(_ + _)
println(result)
}
}
@@ -0,0 +1,31 @@
package practise7.exercises
/*
练习 6 ⭐
给:
val nums = List(1, 2, 3, 4, 5)
分别使用:
reduce
fold
计算乘积:
120
也就是:
1 × 2 × 3 × 4 × 5
fold 使用初始值:
1
*/
object Exercises6 {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5)
val resultFold = nums.fold(1)(_ * _)
println(resultFold)
val resultReduce = nums.reduce(_ * _)
println(resultReduce)
}
}