Почему приведенный ниже код возвращает предикат, а не логическое значение?
Это потому, что тип функции (String s) -> !s.isEmpty()
равен Predicate<String>
, вВ этой точке вы просто определяете функцию (которая говорит: «если в качестве входных данных указана строка, возвращаемое значение логического значения, независимо от того, пусто оно или нет).
Обратите внимание, что в этот момент выничего не оценивая, следовательно, результатом является не логическое значение, а скорее функция .
Определение FI из документа:
Функциональные интерфейсы предоставляют целевые типы для лямбдывыражения и ссылки на методы. Каждый функциональный интерфейс имеет один абстрактный метод, называемый функциональным методом для этого функционального интерфейса, которому сопоставляются или адаптируются параметры и возвращаемые типы лямбда-выражений. Функциональные интерфейсы могут предоставлять целевой тип в нескольких контекстах, таких какконтекст присваивания, вызов метода или контекст приведения:
для получения «логического результата»вы ищете, вы должны сначала вызвать «функциональный метод».пример:
Predicate<String> nonEmptyStringPredicate = s -> !s.isEmpty();
boolean result = nonEmptyStringPredicate.test("");