Java之stream流求字段累计和的3种方法总结

 更新时间:2025年09月12日 08:51:42   作者:冉成未来  
Java中Stream流用来帮助处理集合,类似于数据库中的操作,下面这篇文章主要介绍了Java之stream流求字段累计和的3种方法,文中通过代码介绍的非常详细,需要的朋友可以参考下

示例对象

首先,假设你有一个类Person,它有一个age字段:

public class Person {
    private String name;
    private int age;
 
    // 构造函数
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
 
    // Getter 和 Setter
    public String getName() {
        return name;
    }
 
    public int getAge() {
        return age;
    }
}

方法1:使用mapToInt和sum

如果你想要计算所有人的年龄总和,可以使用mapToInt将Person对象流转换成年龄的IntStream,然后使用sum方法计算总和:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
 
public class Main {
    public static void main(String[] args) {
        List<Person> people = Arrays.asList(
            new Person("Alice", 30),
            new Person("Bob", 25),
            new Person("Charlie", 35)
        );
        
        int totalAge = people.stream()
                             .mapToInt(Person::getAge) // 将Person对象转换为int流,提取年龄字段
                             .sum(); // 计算总和
        
        System.out.println("Total age: " + totalAge); // 输出Total age: 90
    }
}

方法2:使用reduce方法

你也可以使用reduce方法来累加某个字段的值:

int totalAge = people.stream()
                     .map(Person::getAge) // 将Person对象映射为年龄值
                     .reduce(0, Integer::sum); // 使用reduce方法累加年龄值,初始值为0
System.out.println("Total age: " + totalAge); // 输出Total age: 90

方法3:使用collect和summingInt(Java 8或更高版本)

int totalAge = people.stream()
                     .collect(Collectors.summingInt(Person::getAge)); // 使用Collectors.summingInt收集器计算总和
System.out.println("Total age: " + totalAge); // 输出Total age: 90

以上方法都可以用来计算一个列表中所有对象的某个字段的累计和。选择哪种方法取决于你的具体需求和偏好。通常,使用mapToInt().sum()或collect(Collectors.summingInt())是最直接和高效的方式

附:根据某个字段的条件筛选并求和(BigDecimal求和)

BigDecimal reduceMorePayAmount = indemnityPayment.getRiPolicyPayeeIndemnitySet().stream()
                    .filter(riPolicyPayeeIndemnity -> riPolicyPayeeIndemnity.getIndemnityType().equals(IndemnityType.MORE_PAY.getValue()))
                    .map(RiPolicyPayeeIndemnity::getFeeAmount).reduce(BigDecimal.ZERO, BigDecimal::add);

总结

到此这篇关于Java之stream流求字段累计和3种方法的文章就介绍到这了,更多相关Java stream流求字段累计和内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot使用JdbcTemplate操作数据库

    SpringBoot使用JdbcTemplate操作数据库

    这篇文章主要介绍了SpringBoot使用JdbcTemplate操作数据库,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • 分享15款Java程序员必备的开发工具

    分享15款Java程序员必备的开发工具

    这篇文章主要介绍了分享15款Java程序员必备的开发工具,需要的朋友可以参考下
    2015-02-02
  • Java把list分成多个list的方法示例

    Java把list分成多个list的方法示例

    在编程中将大的list集合拆分为多个小集合可以提高处理效率,主要拆分方法包括等量拆分适用于均匀处理数据、 指定数量拆分按固定子集大小划分、根据条件拆分按特定规则进行,这些方法有助于多线程异步处理,需要的朋友可以参考下
    2024-11-11
  • Java简单计时的实现案例(可以用来限时循环)

    Java简单计时的实现案例(可以用来限时循环)

    这篇文章主要介绍了Java简单计时的实现案例(可以用来限时循环),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • Java多线程编程中使用Condition类操作锁的方法详解

    Java多线程编程中使用Condition类操作锁的方法详解

    Condition是java.util.concurrent.locks包下的类,提供了对线程锁的更精细的控制方法,下面我们就来看一下Java多线程编程中使用Condition类操作锁的方法详解
    2016-07-07
  • Java使用itext生成复杂数据的pdf的示例代码

    Java使用itext生成复杂数据的pdf的示例代码

    Apache iText 是一个开源 Java 库,支持 PDF 文档的开发和转换,在本教程中,我们将学习如何使用 iText 开发可以创建、转换和操作 PDF 文档的 Java 程序,感兴趣的小伙伴跟着小编一起来看看吧
    2024-12-12
  • java 获取日期的几天前,几个月前和几年前的实例

    java 获取日期的几天前,几个月前和几年前的实例

    下面小编就为大家带来一篇java 获取日期的几天前,几个月前和几年前的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 在Spring Boot中实现文件上传与管理的操作

    在Spring Boot中实现文件上传与管理的操作

    在 Spring Boot 中实现文件上传与管理非常简单,通过配置文件上传、创建文件上传、下载、列表和删除接口,我们可以轻松地处理文件操作,结合前端页面,可以提供一个完整的文件管理系统,这篇文章主要介绍了在Spring Boot中实现文件上传与管理,需要的朋友可以参考下
    2024-07-07
  • idea同时打开多个项目的图文教程

    idea同时打开多个项目的图文教程

    这篇文章主要给大家介绍了idea同时打开多个项目的图文教程,文章通过图文结合的形式给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-02-02
  • Java interrupt()方法使用注意_动力节点Java学院整理

    Java interrupt()方法使用注意_动力节点Java学院整理

    这篇文章主要介绍了Java interrupt()方法使用注意_动力节点Java学院整理,需要的朋友可以参考下
    2017-05-05

最新评论