java - Java Stream 减少泛型类型的 ArrayList
问题描述
我有一个名为“Catalog”的文章(通用类型)的 ArrayList。
一篇文章有以下方法:
public int getUnitsInStore()
public long getUnitPrice()
为了获得目录中所有文章的总价值,我尝试使用 Java Stream Api 的 Reduce 方法。
我试过以下:
long value = 0;
value = catalog.stream().reduce((a,b) -> a.getUnitPrice()*b.getUnitsInStore());
但这给了我错误:
Type mismatch: cannot convert from Optional<Article> to long
我做错了什么?
解决方案
累加器 lambda 中的a
和b
分别是流中的部分结果和下一个元素。由于您要减少文章列表,因此部分结果是文章,您不能向文章添加 Long。
所以在你的情况下,你可能想做这样的事情。
value = catalog.stream()
.map(a -> a.getUnitPrice() * a.getUnitsInStore())
.reduce(0L, Long::sum);
推荐阅读
- python - 是否可以检查是否触发了“if/else”块?
- floating-point - 文本可读性程序
- javascript - 新开发人员尝试在 Django 上运行任务而无需重新加载页面。可能是 Alpine.js
- c++ - 可变参数函数模板不能很好地使用 std::function 作为参数
- spring - Spring websocket:如何发送给除消息发送者之外的所有订阅者
- reactjs - 如何在页面加载时只显示消息而不是闪烁的文本 - React Hooks
- python - Matplotlib 辅助股票图表
- vue.js - Nuxt 布局和获取静态内容
- elasticsearch - Elasticsearch:双重嵌套对象上的术语聚合
- powershell - Powershell ISE 无法识别脚本中的更改