То, что вы используете, не лямбда .Лямбда выглядит как (arguments) -> action
.В A::getName
есть ссылка на метод , но дополнительный ::length
не является частью его синтаксиса.
Вместо A::getName::length
вы можете использовать лямбду, например a -> a.getName().length()
.
Но у вашего кода есть еще одна проблема.Код
list_a.stream()
.max(Comparator.comparingInt(A::getName::length));
обрабатывает потоки A
, а метод max
, вызванный на Stream<A>
, приведет к Optional<A>
, а не int
.Это Optional
, потому что есть вероятность, что list_a
может быть пустым, что означает, что не будет никакого действительного результата.
Если вы хотите получить OptionalInt, вам потребуется от map
Stream<A>
до Stream<String>
, а затем map
до Stream of int
с.Затем вы можете вызвать метод max()
и получить:
OptionalInt maxOpt = list_a.stream()
.map(A::getName)
.mapToInt(String::length)
.max();
Когда у вас уже есть OptionalInt
, вы можете использовать его, чтобы проверить, есть ли значение там isPresent()
, и получить его через getAsInt()
.Вы также можете использовать orElse(defaultValueIfEmpty)
как
int max = maxOpt.orElse(-1); //will return value held by maxOpt, or -1 if there is no value