当前位置: 首页 > article >正文

Java Stream reduce 函数,聚合数据

Stream.reduce() 是 Stream 的一个聚合方法,它可以把一个 Stream 的所有元素按照自定义聚合逻辑,聚合成一个结果。

先看一个简单数字求和:

public class Main {
	public static void main(String[] args){
	int sum = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9).reduce(0,(acc, n) -> acc + n);
	System.out.println(sum); // 45
}

如下方法签名所示,带有三个参数的 reduce 是单线程流和多线程并行流都可以使用的。

<U> U reduce(U identity,
             BiFunction<U, ? super T, U> accumulator,
             BinaryOperator<U> combiner);

如下是一个逻辑处理收集复杂一些的示例,综合演示了 mapflatMapreduce 的使用。

// 处理逻辑:将一组纯数字字符串,先使用map分别为每个元素追加一个1,
// 再使用flatMap将数字字符串转换为一个只包含单个Integer数字的新stream,
// 然后对新的单数字流分别乘以10之后在前面拼接字符串Num-,最后将结果收集到集合中。

public static void main(String[] args) {
    List<String> resultList = Stream.of("12", "34", "56")
            .map(item -> item.concat("1"))
            .flatMap((Function<String, Stream<Integer>>) str -> Stream.of(str.split("")).map(Integer::parseInt))
            .map(item -> "Num-".concat(String.valueOf(item * 10)))
            .reduce(new ArrayList<>(), (list, item) -> {
                list.add(item);
                return list;
            }, (list, item) -> {
                list.addAll(item);
                return list;
            });
    resultList.forEach(System.out::println);
}
  • reduce() 方法将一个Stream的每个元素依次作用于 BinaryOperator,并将结果合并。
  • reduce() 是聚合方法,聚合方法会立刻对 Stream 进行计算,属于流的最后终止函数(This is a terminal operation.)。

(END)


http://www.kler.cn/a/417542.html

相关文章:

  • [NKU]C++安装环境 VScode
  • 【创建模式-单例模式(Singleton Pattern)】
  • 蓝桥杯备赛题目练习(一)
  • 【2024华为OD-E卷-100分-箱子之字形摆放】((题目+思路+JavaC++Python解析)
  • MongoDB学习笔记-解析jsonCommand内容
  • 【戒抖音系列】短视频戒除-1-对推荐算法进行干扰
  • html 中的 <code>标签
  • uniapp的video组件截图(抓拍)功能,解决截后为黑图bug
  • MySQL中的锁与MVCC
  • 【Ansible】自动化运维工具
  • Kafka知识体系
  • Python面向对象编程与模块化设计练习
  • 【Linux】管道
  • RAT:融合RAG和CoT的高效多步推理任务策略
  • 【ROS2】ROS2 Hello World (C++实现)
  • Keras构建卷积神经网络
  • 48-基于单片机的LCD12864时间调控和串口抱站
  • Oracle对比表与表之间的结构
  • 【Lucene】单个cpu 每秒能支持多少个bm25公式的计算
  • Apache Flink从Kafka中消费商品数据,并进行商品分类的数量统计题
  • 【测试工具JMeter篇】JMeter性能测试入门级教程(四):JMeter中BeanShell内置方法使用
  • 拓扑排序(C++实现)
  • ffmpeg安装(windows)
  • updatexml报错注入原理分析
  • kylinos-server源码安装xrdp
  • 丹摩征文活动 | SD3+ComfyUI的图像部署实践 AIGC图像