相关文章推荐
近视的桔子  ·  环境科学与工程学院2025年第6次党政联席会 ...·  7 月前    · 
火爆的牛肉面  ·  EasyRTC进去会议室控制台websock ...·  2 年前    · 
俊秀的瀑布  ·  存储过程(数据库引擎) - SQL ...·  2 年前    · 
捣蛋的骆驼  ·  javacv读取图片报错org.opencv ...·  2 年前    · 
伤情的核桃  ·  Matplotlib数据可视化(4):折线图 ...·  2 年前    · 
Code  ›  Java8使用Stream实现List中对象属性的求和、最大、最小、平均值开发者社区
list
https://cloud.tencent.com/developer/article/1976587
高大的猕猴桃
2 年前
作者头像
一个正经的程序员
0 篇文章

Java8使用Stream实现List中对象属性的求和、最大、最小、平均值

前往专栏
腾讯云
备案 控制台
开发者社区
学习
实践
活动
专区
工具
TVP
文章/答案/技术大牛
写文章
社区首页 > 专栏 > 一个正经的程序员 > 正文

Java8使用Stream实现List中对象属性的求和、最大、最小、平均值

发布 于 2022-04-11 09:12:27
6.1K 0
举报

前言

Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。

Stream 使用一种类似用 SQL 语句从 数据库 查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。

Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。

这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。

元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。

特点

1 . 不是数据结构,不会保存数据。

2. 不会修改原来的数据源,它会将操作后的数据保存到另外一个对象中。(保留意见:毕竟peek方法可以修改流中元素)

3. 惰性求值,流在中间处理过程中,只是对操作进行了记录,并不会立即执行,需要等到执行终止操作的时候才会进行实际的计算。

用法

今天,我们主要讲一下Stream中的求和、最大、最小、平均值。

public static void main(String[] args) throws Exception {
    List<Pool> list = new ArrayList<Pool>(){
        add(new Pool("A", 1));
        add(new Pool("A", 2));
        add(new Pool("A", 3));
        add(new Pool("B", 4));
        add(new Pool("B", 5));
    // 求和
    int sum = list.stream().mapToInt(Pool::getValue).sum();
    // 最大值
    OptionalInt max = list.stream().mapToInt(Pool::getValue).max();
    // 最小值
    OptionalInt min = list.stream().mapToInt(Pool::getValue).min();
    // 平均值
    OptionalDouble average = list.stream().mapToInt(Pool::getValue).average();
    System.err.println(sum);
    System.err.println(max.getAsInt());
    System.err.println(min.getAsInt());
    System.err.println(average.getAsDouble());
  }

输出结果 3.0

其他方法

当然,Stream远不止这么简单,不止有mapToInt(),还有mapToLong()、mapToDouble()等方法。

list.stream().mapToLong(Pool::getValue).sum();
list.stream().mapToLong(Pool::getValue).max();
list.stream().mapToLong(Pool::getValue).min();
list.stream().mapToLong(Pool::getValue).average();
 
推荐文章
近视的桔子  ·  环境科学与工程学院2025年第6次党政联席会议议题公示-同济大学环境科学与工程学院
7 月前
火爆的牛肉面  ·  EasyRTC进去会议室控制台websocket出现pending状态解决方法-腾讯云开发者社区-腾讯云
2 年前
俊秀的瀑布  ·  存储过程(数据库引擎) - SQL Server | Microsoft Learn
2 年前
捣蛋的骆驼  ·  javacv读取图片报错org.opencv.imgcodecs.Imgcodecs.imread_1(Ljava/lang/String;)的解决方法以及opencv的dll文件下载_pipistar2016的博客-CSDN博客
2 年前
伤情的核桃  ·  Matplotlib数据可视化(4):折线图与散点图 - 奥辰 - 博客园
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号