首页 > 解决方案 > 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

我做错了什么?

标签: javajava-streamreduce

解决方案


累加器 lambda 中的ab分别是流中的部分结果和下一个元素。由于您要减少文章列表,因此部分结果是文章,您不能向文章添加 Long。

所以在你的情况下,你可能想做这样的事情。

value = catalog.stream()
            .map(a -> a.getUnitPrice() * a.getUnitsInStore())
            .reduce(0L, Long::sum);

推荐阅读