java 分别合计某对象队列的几个字段
时间: 2024-01-12 12:11:56 浏览: 70
Java利用Redis实现消息队列的示例代码
5星 · 资源好评率100%
给定一个对象队列,可以使用 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()` 方法输出。
阅读全文