在lambda表达式中使用过滤器时,为什么会显示错误?

时间:2018-08-31 14:11:34

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

我是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).

1 个答案:

答案 0 :(得分:3)

我猜想方法参考的基础知识。

String::toUppercase

等效于:

s -> s.toUppercase()

而:

startsWith("G")

理论上将等效于:

s -> s.startsWith("G")

这是语言所不允许的。