Streams Начинающий

Использование Predicate.not() для чистого отрицания ссылок на методы вместо написания лямбда-обёрток.

✕ Java 8
List<String> nonEmpty = list.stream()
    .filter(s -> !s.isBlank())
    .collect(Collectors.toList());
✓ Java 11+
List<String> nonEmpty = list.stream()
    .filter(Predicate.not(String::isBlank))
    .toList();
Заметили проблему в этом коде? Сообщите нам.
👁

Чистое отрицание

Не нужны лямбда-обёртки для ссылок на методы только ради отрицания.

🔗

Компонуемый

Работает с любым Predicate и позволяет строить чистые цепочки предикатов.

📖

Естественно читаемый

Predicate.not(String::isBlank) читается как естественный язык.

Старый подход
Отрицание через лямбду
Современный подход
Predicate.not()
Начиная с JDK
11
Сложность
Начинающий
Predicate.not() для отрицания
Доступно

Доступно с JDK 11 (сентябрь 2018).

До Java 11 для отрицания ссылки на метод требовалась её обёртка в лямбду. Predicate.not() позволяет напрямую отрицать любой предикат, что делает код читаемым и согласованным со стилем ссылок на методы во всём пайплайне Stream.