一、先记住一句话
ini
List<Integer> words = Arrays.asList(1, 2,3, 4);
//总和
int sum = words.stream().reduce(0, Integer::sum);
//最大值
int max = words.stream().reduce(0, Integer::max);
//最小值
int min = words.stream().reduce(0, Integer::min);
reduce = 把一堆东西 → 慢慢合并 → 变成一个东西
比如:
一堆数字 → 求和 → 一个总数
一堆数字 → 求最大 → 一个最大值
一堆字符串 → 拼接 → 一个字符串
reduce 就是 "聚合 / 归约"
二、拆解开逐行解释
java
运行
arduino
int sum = list.stream() // 1. 把集合变成流
.reduce(0, // 2. 初始值(从 0 开始加)
Integer::sum); // 3. 怎么加(两两相加)
1. list.stream()
把集合变成数据流,方便处理。
2. reduce(初始值, 怎么运算)
第一个参数:0 表示:我要从 0 开始累加
第二个参数:Integer::sum 表示:每两个数,执行相加操作
三、最关键:它内部是怎么执行的?
假设 list = [1,2,3,4]
执行过程:
plaintext
ini
0 + 1 = 1
1 + 2 = 3
3 + 3 = 6
6 + 4 = 10
最终结果 = 10
就是这么简单!
四、用最土的话翻译
java
运行
scss
reduce(0, Integer::sum)
等于:
plaintext
从 0 开始
把列表里的数字一个一个拿过来加
最后返回总和
五、换成 Lambda 你就更懂了
Integer::sum 等价于:
java
运行
css
(a, b) -> a + b
所以完整写法:
java
运行
css
int sum = list.stream()
.reduce(0, (a, b) -> a + b);
- a = 上一次计算的结果
- b = 当前要加的数
六、超级简单的完整例子(运行一下就懂)
java
运行
java
import java.util.Arrays;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,2,3,4);
int sum = list.stream()
.reduce(0, Integer::sum);
System.out.println(sum); // 输出 10
}
}
七、你只要记住 3 个点
- reduce = 把多个值合成一个值
- 第一个参数是初始值
- 第二个参数是怎么合并(比如相加)