首页 > 解决方案 > 迭代对象列表并获得平均值

问题描述

有没有办法通过一次迭代在这里获得平均值?我可以用常规的“For循环”来做,但想用流来代替。

final Double ratingSum = ratingCount.stream().mapToDouble(RecommendRatingCount::getRatingSum).sum(); 
final Double countSum = ratingCount.stream().mapToDouble(RecommendRatingCount::getCount).sum();
return ratingSum /countSum;

标签: java

解决方案


将每个对象分解为单独的评级,每个值是评级/计数,首先扩展每个对象的count时间,然后将每个对象转换为其折扣值,然后汇总所有这些值:

double average = ratingCount.stream()
    .flatMap(rrc -> generate(() -> rrc).limit(rrc.getCount()))
    .mapToDouble(rcc -> rcc.getRatingSum() / rcc.getCount())
    .summaryStatistics().getAverage();

推荐阅读