我不太明白java stream reduce是如何工作的。
我有一个名为“catalog”的arraylist文章(泛型类型)。
文章有以下方法:
public int getUnitsInStore()
public long getUnitPrice()
为了获得目录中所有文章的总价值,我尝试使用javastreamapi的reduce方法(请不要使用循环提供anwser,我已经知道如何做了)
我试着做到:
long value = 0;
value = catalog.stream().reduce((a,b) -> a.getUnitPrice()*b.getUnitsInStore());
但这给了我一个错误:
Type mismatch: cannot convert from Optional<Article> to long
我做错了什么?正如我所说,我不确定我是否真的理解reduce方法是如何工作的。
3条答案
按热度按时间ws51t4hk1#
我建议你用
Stream.reduce()
需要两个参数的重载:identity:identity元素既是缩减的初始值,也是流中没有元素时的默认结果
累加器:采用两个参数的累加器函数:还原的部分结果和流的下一个元素。它返回一个新的部分结果。
因此,您将通过以下方式获得您的价值:
shyt4zoc2#
有三种类型的reduce方法。尝试此代码以更好地理解它
aiazj4mn3#
这个
a
以及b
在累加器lambda中,分别是部分结果和流中的下一个元素。由于您要减少文章列表,因此部分结果是一篇文章,您不能向文章中添加long。所以在你的情况下,你可能想这样做。