例如,我有一个列表(或集合),每个条目都要使用相同的方法。使用lamba可以轻松实现这一点:
ingredientBaskets.forEach(this::processToMarmalade);
但是我希望processToMarmalade方法能够返回无法处理的水果块数量,最后总结一下。通过总结方法并返回错误数量,我可以轻松地做到这一点。
我想拥有的基本上是这样的:
int result = ingredientBaskets.forEach(this::processToMarmalade).sum();
某事。
或者换句话说,就像这样做:
int result = 0;
for (final Basket basket: ingredientBaskets) {
result += processToMarmalade(basket)
}
}
有办法吗?
编辑:从答案中,List和Set将允许使用IntStream,这是我需要的一件事。然而,如果它是可以进行的呢?这个没有流,只有一个forEach 假设原始问题,也适用于Iterable的情况。 forEach可以总结一下,还是我必须先创建一个新的List并用Iterable的内容填充它?
答案 0 :(得分:4)
您要找的是the mapToInt
method(假设processToMarmalade
返回int
):
int result = ingredientBaskets.stream().mapToInt(this::processToMarmalade).sum();
如果您的ingredientBaskets
是Iterable<?>
,则convert it to a stream可以这样:
StreamSupport.stream(ingredientBaskets.spliterator(), false)
.mapToInt(this::processToMarmalade)
.sum();
答案 1 :(得分:1)
ingredientBaskets.stream()
.mapToInt(this::processToMarmalade)
.sum()
答案 2 :(得分:0)
我想我会这样做:
ingredientBaskets.stream().mapToInt(this::processToMarmalade).sum();