假设我有一个Person类:
class Person {
String firstName;
String age;
public String getFirstName() {
return firstName;
}
public String getAge() {
return age;
}
}
我有一个List<Person>
作为输入。输出时,我想得到每个firstName
的平均年龄的DoubleStream
。目前我已经实现了以下代码,它可以工作:
public DoubleStream getAverageAgesPerFirstName(List<Person> people) {
return people
.stream()
.collect(
groupingBy(Person::getFirstName)
)
.entrySet()
.stream()
.collect(
toMap(Entry::getKey, this::getAverageAge)
)
.values()
.stream()
.mapToDouble(Double::doubleValue)
}
private double getAverageAge(Entry<String, List<Person>> entry) {
return entry.getValue().stream().map(Person::getAge).mapToDouble(Integer::doubleValue).average().orElse(0);
}
我觉得应该有更高效的方法来完成这个任务。最明显的是,在将这些转换为流之前,我正在创建两个中间映射。
DoubleStream
?用 double 的平均值不就足够了吗? - Nicholas K