Predicate.not() para negação
Use Predicate.not() para negar referências de método de forma limpa, em vez de escrever lambdas de encapsulamento.
Comparação de Código
✕ 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();
Viu um problema com este código? Nos avise.
Por que a forma moderna ganha
Negação mais limpa
Sem necessidade de envolver referências de método em lambdas apenas para negá-las.
Componível
Funciona com qualquer Predicate, permitindo encadeamentos limpos de predicados.
Leitura natural
Predicate.not(String::isBlank) lê-se de forma natural.
Abordagem Antiga
Negação com lambda
Abordagem Moderna
Predicate.not()
Desde o JDK
11
Dificuldade
Iniciante
Suporte JDK
Predicate.not() para negação
Disponível
Disponível desde o JDK 11 (setembro de 2018)
Como funciona
Antes do Java 11, negar uma referência de método exigia envolvê-la em uma lambda. Predicate.not() permite negar qualquer predicado diretamente, mantendo o código legível e consistente com o estilo de referência de método em todo o pipeline do stream.
Documentação Relacionada