java - 迭代对象列表并获得平均值
问题描述
有没有办法通过一次迭代在这里获得平均值?我可以用常规的“For循环”来做,但想用流来代替。
final Double ratingSum = ratingCount.stream().mapToDouble(RecommendRatingCount::getRatingSum).sum();
final Double countSum = ratingCount.stream().mapToDouble(RecommendRatingCount::getCount).sum();
return ratingSum /countSum;
解决方案
将每个对象分解为单独的评级,每个值是评级/计数,首先扩展每个对象的count
时间,然后将每个对象转换为其折扣值,然后汇总所有这些值:
double average = ratingCount.stream()
.flatMap(rrc -> generate(() -> rrc).limit(rrc.getCount()))
.mapToDouble(rcc -> rcc.getRatingSum() / rcc.getCount())
.summaryStatistics().getAverage();
推荐阅读
- php - 在href中插入php变量在第二次插入中不起作用
- ios - 如何从 Xcode 的存档列表中删除旧帐户应用程序详细信息
- jquery - jQuery 属性选择器,检查 attr 存在但不包含字符串
- ansible - 如何在ansible cli上传递密码?
- sql-server - Microsoft Dynamics 365 在线 SQL Server 数据库的日志文件
- java - PCA 因 ND4J 失败:找不到 BLAS?
- matrix - Clojure 生成矩阵
- ruby - Address Sanitizer 与 Ruby Nokogiri 模块
- sql - 数据库设计:一个表中的两行或更多行如何将它们连接在一起?
- java - 为什么浮点值“++”操作与 3.14 不同?