feat:ChatGPT第 7 课:foreach、reduce、fold,开始学习“遍历”和“把多个元素聚合成一个结果
This commit is contained in:
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user