为什么在 lambda 表达式中使用过滤器时会出现错误?

Why does the errors shows up when using filters in lambda expressions?

我是 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' 应该充当谓词,return 应该充当布尔值。但是为什么会显示编译错误呢?使用以下行时我没有收到错误消息:

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

上面,流被传递到过滤器。那么参数 s 的必要性是什么?例如,如果用作

,'.map' 会毫无错误地处理它
.map(String::toUppercase).

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

String::toUppercase

相当于:

s -> s.toUppercase()

同时:

startsWith("G")

理论上等同于:

s -> s.startsWith("G")

这是语言所不允许的。