int sum = list.stream().reduce(0, Integer::sum); 含义?

一、先记住一句话

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 个点

  1. reduce = 把多个值合成一个值
  2. 第一个参数是初始值
  3. 第二个参数是怎么合并(比如相加)
相关推荐
蜗牛互联网38 分钟前
WSL Containers GA:本地AI容器的生命周期、网络与治理验收
java·网络·人工智能·后端
龙亘川1 小时前
铭记英烈守初心,数字强基促服务:亘川智城退役军人服务系统的实践与价值
java·数据库·人工智能
OxYGC1 小时前
[AI工程] Spring AI 第廿一篇:存量 REST 接口的 MCP 化改造实录——工具从哪条路径注册、参数描述怎么写、身份怎么过去
java·人工智能·spring
Zhou1411362 小时前
SpringBoot_02_自动配置原理
java·spring boot·后端
FYKJ_20102 小时前
SSM校园失物招领系统41452-计算机课程设计、毕业设计
java·vue.js·spring boot·python·mysql·typescript·spark
kv1102 小时前
Android studio国内开发有关
java·数据库·android studio
卓怡学长2 小时前
w198基于springboot始于足下健康打卡平台的设计与实现
java·spring boot·spring·intellij-idea
阿狗童鞋3 小时前
Java并发编程实战指南
java·开发语言
Joe_Wang53 小时前
【从0到1学习JVM · 15】对象在堆里来回倒腾,究竟怎样才会进老年代?
java·jvm·学习·垃圾回收
一条小小yu3 小时前
为什么使用springboot
java·spring boot·后端