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

问题描述 投票:1回答:1

我是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'应该作为谓词并返回一个布尔值。但为什么它会显示编译错误?使用以下行时,我没有收到错误:

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

上面,流传递给过滤器。那么论证的必要性是什么?例如,'。map'处理它,如果用作没有任何错误

.map(String::toUppercase).
lambda java-8 java-stream functional-interface
1个回答
3
投票

关于方法参考的基本知识我猜。

String::toUppercase

相当于:

s -> s.toUppercase()

而:

startsWith("G")

理论上相当于:

s -> s.startsWith("G")

语言根本不允许这样做。

© www.soinside.com 2019 - 2024. All rights reserved.