用方法引用替换Lambda表达式

6
我有一个静态方法,它接受参数Stream<Double> stream,可以来自arraylist.stream()Arrays.stream(array)
该方法的作用是返回所有可被三整除的整数的总和。 return stream.filter(i -> i.intValue() % 3 == 0).mapToInt(i -> i.intValue()).sum() 这个方法可以工作,但是IntelliJ建议使用方法引用,如下所示:

此检查报告了可以用方法引用替换的lambda表达式。

我对方法引用不太熟悉,尤其是使用类名引用实例方法的情况。
我尝试了以下代码,但出现错误。 stream.filter(i -> i.intValue() % 3 == 0).mapToInt(Integer::intValue).sum() 你有什么建议吗?

6
因为 i 是一个 Double 类型的变量,所以你应该使用 Double::intValue 方法。IntelliJ 不仅会检查代码,还会建议更改方法。只需按下 alt + enter 即可。 - mrjink
2
如果IntelliJ建议这样的替换,您可以指示它执行该替换。顺便说一句,只进行一次拆箱会更有效率,即.mapToInt(Double::intValue).filter(i -> i % 3 == 0) - Holger
1
@Holger 反转顺序不会导致将双精度数四舍五入为整数,然后被三整除并改变结果的可能性吗? - Liam Ferris
2
你的原始代码 i.intValue() % 3 == 0 已经完美地实现了这个功能。 - Holger
1个回答

7

您所说的参数流是Double类型,因此您应该执行以下操作:

stream.mapToInt(Double::intValue).filter(i -> i % 3 == 0).sum()

因为您正在调用Double类的intValue函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接