【问题标题】:Replacing lambda expression with method reference用方法引用替换 lambda 表达式
【发布时间】: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


【解决方案1】:

正如你所说的参数流是Double类型,所以你应该这样做

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

因为你调用的是 Double 类的 intValue 函数。

【讨论】:

    猜你喜欢
    • 2019-11-18
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多