Muito bom man, parabéns. No começo eu achava streams um verdadeiro bixo de 777 cabeças. Mas conhecendo melhor a API percebi que é a coisa mais simples e mais agradavel de trabalhar que existe kkk.
Deixando minha humilde contribuição, além dos métodos que vc destacou, eu também uso muito no dia a dia como dev os métodos anyMatch
, noneMatch
e allMatch
, eles são bem legais, ajudam a encontrar determinadas ocorrências numa lista de forma bem simples, por exemplo:
1. anyMatch:
- Retorna verdadeiro se pelo menos um item da lista satisfizer a condição, no caso abaixo, retornará verdadeiro se pelo menos uma das pessoas for maior de idade.
personList.stream().anyMatch(p -> p.age >= 18);
2. noneMatch:
- Retorna verdadeiro se ninguém da lista satisfizer a condição, no caso abaixo, retornará verdadeiro se nenhuma das pessoas for maior de idade.
personList.stream().noneMatch(p -> p.age >= 18);
3. allMatch:
- Retorna verdadeiro se todos os itens da lista satisfizerem a condição, no caso abaixo, retornará verdadeiro se todas as pessoas forem maiores de idade.
personList.stream().allMatch(p -> p.age >= 18);
O mais massa é que a JVM já otimiza esses métodos, todos eles param assim que é possível definir o resultado, por exemplo, o método anyMatch
para
de executar no momento
em que ele encontra o primeiro caso que da match
(retorna verdadeiro). O método noneMatch
para
de executar no momento
em que ele encontra o primeiro caso que dê match
(e retorna falso). E o método allMatch
para
de executar no momento
em que ele encontra o primeiro caso que não dê match
(e retorna falso). O código fica mais legível (e por consequência, agradável de ler e entender) do que se isso fosse feito na mão com for
e if
.