迭代对象列表并获取平均值



是否有办法通过一次迭代获得这里的平均值?我可以用常规的"For循环"但是我想用流代替。

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

假设使用Java 12或更高版本,

return 
ratingCount.stream()  
.collect(Collectors.teeing(    
Collectors.summingDouble(RecommendRatingCount::getRatingSum),  
Collectors.summingDouble(RecommendRatingCount::getCount),  
(sum, count) -> sum / count));

将每个对象分解为单独的评级,每个值为评级/计数,首先展开每个对象count次,然后将每个对象转换为其贴现值,然后总结所有这些值:

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

假设你的RatingCount是一个自然数

return ratingCount.stream()
.flatMapToDouble(a -> DoubleStream.concat(DoubleStream.of(a.getRatingSum()),
DoubleStream.generate(() -> 0).limit((long) a.getCount() - 1)))
.average().orElse(0);

最新更新