Часто код выглядит так:
.filter(name -> !name.isBlank())
Работает, но когда условий становится больше, такие отрицания начинают хуже читаться.
В Java есть Predicate.not():
.filter(Predicate.not(String::isBlank))
Так сразу видно: оставить все строки, которые не blank.
Например:
List<String> names = users.stream()
.map(User::name)
.filter(Objects::nonNull)
.filter(Predicate.not(String::isBlank))
.toList();
Это удобно для фильтрации имён, email, тегов, параметров запроса, строк из файлов и любых пользовательских данных.
Особенно хорошо читается вместе с method reference:
Predicate.not(String::isEmpty)
Predicate.not(Collection::isEmpty)
Predicate.not(Optional::isEmpty)
Важно только не превращать это в головоломку: если условие сложное, лучше вынести его в отдельный метод с понятным названием.
Так код в stream-цепочках становится аккуратнее и легче читается.
👉 Java Ready | #совет