Почему ошибки появляются при использовании фильтров в лямбда-выражениях?
Я новичок в лямбда-выражениях. У меня есть следующий код:
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")
Это просто не разрешено языком.