В Java компилятор определяет возвращаемый тип лямбда-выражения на основе контекста, в котором оно используется. Если лямбда-выражение используется в контексте, требующем значения определенного типа, то компилятор автоматически выводит тип возвращаемого значения лямбда-выражения из контекста. Например, если мы хотим отфильтровать массив строк с помощью лямбда-выражения, возвращающего значения типа boolean, компилятор автоматически выводит этот тип: String[] words = {"foo", "bar", "baz"};
List<String> shortWords = Arrays.stream(words)
.filter(s -> s.length() < 4)
.collect(Collectors.toList()); Здесь лямбда-выражение s -> s.length() < 4 имеет возвращаемый тип boolean, который компилятор выводит из типа метода filter, который требует параметр типа Predicate. Если лямбда-выражение используется в контексте, где не требуется явное указание типа, компилятор использует правила вывода типов для определения возвращаемого типа. Если лямбда-выражение может быть преобразовано к различным ф