java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java stream流求字段累计和

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

作者:冉成未来

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流求字段累计和内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文