如何将带参数的方法引用传递给Arrays.stream?

时间:2015-11-25 12:50:25

标签: java lambda java-stream

我有一个接口的方法,它通过一个项目和buff的数组,并计算所有特定方法的总和,如下所示:

self.ref_holder

此代码不起作用,因为您不能del self.ref_holder,因为您不允许使用带参数的方法引用。

我怎样才能解决这个问题?

2 个答案:

答案 0 :(得分:1)

在这种情况下,您不能使用方法引用。你可以改写一个lambda表达式。

float bonus = (float) Arrays.stream(items)
                            .filter(Objects::nonNull)
                            .mapToDouble(item -> item.getDamageReduction(this))
                            .sum();

答案 1 :(得分:0)

您不能以这种方式使用函数引用。您可以通过以下方式在流外创建Function

Function<Item, Double> func1 = item -> item.getDamageReduction(this);

分别为第二行

Function<Buff, Double> func2 = buff -> buff.getDamageReduction(this);

然后按如下方式使用它:

float bonus = (float)Arrays.stream(items)
    .filter(Objects::nonNull)
    .mapToDouble(func1)
    .sum();

但我认为更简单的只是写:

float bonus = (float)Arrays.stream(items)
    .filter(Objects::nonNull)
    .mapToDouble(item -> item.getDamageReduction(this))
    .sum();