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

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

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 ответ

Решение

Базовые знания о методах ссылок, я думаю.

String::toUppercase

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

s -> s.toUppercase()

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

startsWith("G")

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

s -> s.startsWith("G")

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

Другие вопросы по тегам