【发布时间】:2016-10-07 11:17:14
【问题描述】:
我有一个静态方法,它采用参数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()
有什么建议吗?
【问题讨论】:
-
由于
i是一个Double,你应该使用Double::intValue。 IntelliJ 不仅检查,而且提出更改。只需按 alt-enter。 -
如果 IntelliJ 建议这样的替换,您可以指示它执行该替换。顺便说一句,只拆箱一次会更有效,即
.mapToInt(Double::intValue).filter(i -> i % 3 == 0) -
@Holger 确实颠倒顺序不会运行将双精度数舍入为整数的可能性,然后整数可以被三整除并改变结果?
-
您的原始代码
i.intValue() % 3 == 0已经做到了。
标签: java intellij-idea lambda java-8 method-reference