java list 集计算某个字段的合计

BigDecimal sumSalary = dtos.stream().map(s -> s.getSalary()).reduce(BigDecimal.ZERO, BigDecimal::add)
给定一个对象队列,可以使用 Java 8 中的流式 API 将队列中的对象按照某个字段分组,并对每个分组中的对象进行字段合计。例如,假设有一个 `Person` 类,包含姓名、年龄和收入三个属性,需要按照年龄字段分组,并对每个分组中的对象的收入字段进行求和,可以使用如下代码实现: ```java import java.util.*; import java.util.stream.Collectors; public class Person { private String name; private int age; private double income; public Person(String name, int age, double income) { this.name = name; this.age = age; this.income = income; } public String getName() { return name; } public int getAge() { return age; } public double getIncome() { return income; } public static void main(String[] args) { List<Person> persons = Arrays.asList( new Person("Tom", 18, 2000), new Person("Jerry", 20, 3000), new Person("Lucy", 22, 4000), new Person("Lily", 19, 2500), new Person("Jim", 21, 3500) ); Map<Integer, DoubleSummaryStatistics> groupByAge = persons.stream() .collect(Collectors.groupingBy(Person::getAge, Collectors.summarizingDouble(Person::getIncome))); groupByAge.forEach((age, summary) -> { System.out.println(age + ": " + summary.getSum()); }); } } ``` 输出结果为: ``` 18: 2000.0 19: 2500.0 20: 3000.0 21: 3500.0 22: 4000.0 ``` 使用 `Collectors.groupingBy()` 方法,可以将一个 `Stream` 对象中的元素按照指定的字段(这里是 `Person` 类的 `age` 属性)进行分组,并返回一个 `Map` 对象,其中键为分组的字段值(这里是年龄),值为对分组中的元素进行求和等统计操作后的结果(这里是收入的求和)。在上面的代码中,将收入字段的求和结果通过 `DoubleSummaryStatistics` 对象的 `getSum()` 方法输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值