Почему ошибки появляются при использовании фильтров в лямбда-выражениях? - PullRequest
0 голосов
/ 31 августа 2018

Я новичок в лямбда-выражениях. У меня есть следующий код:

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 голосов
/ 31 августа 2018

базовые знания по методическим ссылкам, я думаю.

String::toUppercase

эквивалентно:

s -> s.toUppercase()

В то время как:

startsWith("G")

теоретически будет эквивалентно:

s -> s.startsWith("G")

Это просто не разрешено языком.

...