【问题标题】:Why does the errors shows up when using filters in lambda expressions?为什么在 lambda 表达式中使用过滤器时会出现错误?
【发布时间】:2019-02-06 14:18:04
【问题描述】:

我是 lambda 表达式的新手。我有以下代码:

List<String> someNumbers = Arrays.asList("N40", "N36", "B12", "B6", "G53", "G49", "G60", "G50", "G53", "I26", "I17", "I29", "O71");

someNumbers
            .stream()
            .filter(startsWith("G"))

在上面的代码中,“过滤器”应该作为一个谓词并返回一个布尔值。但是为什么它显示编译错误?当我使用以下行时,我没有收到错误:

.filter(s->s.startsWith("G"))

上面,流被传递给过滤器。那么参数 s 的需要是什么?例如,'.map' 处理它时不会出现任何错误

.map(String::toUppercase).

【问题讨论】:

标签: lambda java-8 java-stream functional-interface


【解决方案1】:

我猜关于方法引用的基本知识。

String::toUppercase

相当于:

s -> s.toUppercase()

同时:

startsWith("G")

理论上相当于:

s -> s.startsWith("G")

语言根本不允许这样做。

【讨论】:

  • 好吧,与其说“这根本是语言不允许的”,不如说startsWith("G") 在 Java 语言中已经有了意义,即“在这个点并使用返回值”,25 年了,将其更改为“不调用此方法,但在此时创建一​​个可能调用此方法的谓词实例”将是一个非常具有破坏性的更改。实际想要调用方法并使用返回谓词的代码呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-12
  • 1970-01-01
  • 2019-12-29
相关资源
最近更新 更多