我有一个接口的方法,它通过一个项目和buff的数组,并计算所有特定方法的总和,如下所示:
self.ref_holder
此代码不起作用,因为您不能del self.ref_holder
,因为您不允许使用带参数的方法引用。
我怎样才能解决这个问题?
答案 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();