java8 list根据一个值分组并计算另外两个两个值的平均数
时间: 2024-02-24 10:55:41 浏览: 24
可以使用 Java 8 的 stream API 来实现根据一个值分组并计算另外两个值的平均数。假设有一个 `Person` 类,其中包含 `name` 字符串、`age` 整数和 `salary` 浮点数三个属性,可以按照 `name` 字符串对列表进行分组,并计算每个分组中 `age` 和 `salary` 的平均值,代码如下:
```java
List<Person> personList = ...; // 假设有一个 Person 列表
Map<String, DoubleSummaryStatistics> groupSummary = personList.stream()
.collect(Collectors.groupingBy(Person::getName, Collectors.summarizingDouble(Person::getSalary)));
groupSummary.forEach((name, stats) -> {
System.out.println("Name: " + name);
System.out.println("Average age: " + stats.getAverage());
System.out.println("Average salary: " + stats.getAverage());
});
```
在上面的代码中,使用 `Collectors.groupingBy()` 方法按照 `Person` 对象的 `name` 属性进行分组,同时使用 `Collectors.summarizingDouble()` 方法对 `salary` 属性进行统计,得到一个 `DoubleSummaryStatistics` 对象,其中包含了每个分组中 `salary` 的统计信息,包括个数、总和、最大值、最小值和平均值。最后,使用 `forEach()` 方法遍历每个分组,并输出每个分组的名称、平均年龄和平均薪资。