Java 8 Stream allMatch() com exemplos
Stream se tem se tornado cada vez mais popular no desenvolvimento em java, neste post vou mostrar como utilizar Stream allMatch() em Java com exemplos
Última atualização em: | 11228 Visualizações
O Stream possui 3 principais métodos para verificação de listas: allMatch(), anyMatch() e noneMatch(). Caso queira saber mais sobre a diferença entre eles leia: Entendendo a diferença entre Stream allMatch(), anyMatch() e noneMatch()
Stream allMatch()
retorna um valor boolean (true
/false
).
Retorna true se todos os elementos desse fluxo correspondem ao predicado fornecido. Pode ainda não avaliar o predicado em todos os elementos se não for necessário para determinar o resultado. Caso uma opção retornar false, os itens restantes não precisam ser avaliados para determinar que alguns dos itens do stream não condiz com o predicate.
allMatch() elementos divisíveis por 2
Vamos entender usando um exemplo. Nestes exemplo temos uma lista de inteiros e queremos saber se todos são divisíveis por 2. Neste caso utilizamos o allMatch()
para determinar se todos os valores são ou não divisíveis por 2. Veja:
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
import static org.junit.Assert.assertFalse;
public class AllMatchTest {
@Test
public void testPredicateFalse() {
// Create list
List<Integer> ls = Arrays.asList(2, 3, 4, 5, 6, 7);
// function to check whether all elements are divisible by 2.
boolean result = ls.stream().allMatch(n -> {
System.out.println("Verify: " + n);
return n % 2 == 0;
});
assertFalse(result);
}
}
Ao executar este código, temos a seguinte saída em seu console:
Verify: 2
Verify: 3
Note que foram impressos no console apenas os números 2 e 3.
E em seguida temos o teste sendo aprovado. Isso significa que ao executar a * predicate* para o valor número 3 e determinar que o valor não atendeu o valor esperado, os itens seguintes foram ignorados. Assim temos o resultado sem passar por todos os itens.
allMatch() verificar tamanho de String
Vamos ao segundo exemplo onde esperamos que todos os itens do tipo string possuam mais que 5 caracteres para que todos sejam aprovados. Veja:
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
import static org.junit.Assert.assertTrue;
public class AllMatchTest {
@Test
public void testPredicate() {
// Create list
List<String> ls = Arrays.asList("Receitas", "Código", "Stream", "allMatch");
boolean result = ls.stream().allMatch(name -> {
System.out.println("Verify: " + name);
return name.length() > 5;
});
assertTrue(result);
}
}
A saída no console para este teste é:
Verify: Receitas
Verify: Código
Verify: Stream
Verify: allMatch
E em sequencia temos o testes indicando que o valor retornado foi verdadeiro: assertTrue(result);
.
Note que como não foi encontrado um item com valor falso, todos os itens foram verificados.
allMatch() com objeto
Neste outro exemplo vamos fazer uma checagem se todos os objetos de um stream tem um valor em um determinado atributo. Veja:
import lombok.AllArgsConstructor;
import lombok.Data;
import org.junit.Test;
import java.util.stream.Stream;
import static org.junit.Assert.assertTrue;
public class AllMatchTest {
@Test
public void testPredicate() {
// Create list
Stream<Person> personStream = Stream.of(new Person("Wolmir", 32), new Person("Cesar", 20));
boolean result = personStream.allMatch(person -> person.getAge() >= 18);
assertTrue(result);
}
@Data
@AllArgsConstructor
public class Person {
private String name;
private Integer age;
}
}
Note que
@Data
e@AllArgsConstructor
são anotações do lombok. Pode saber mais neste post: Como usar o Lombok em projetos Java
Neste exemplo criamos um Stream diretamente e utilizamos o allMatch()
para verificar se todas as pessoas são maiores de 18 anos. Sua execução não imprime nada no console e retorna verdadeiro por que ambas as pessoas possuem acima de 18 anos.
Conclusão sobre allMatch()
Usando um predicate conseguimos verificar se todos os elementos de uma lista atendem determinado requisito. Com o uso do allMatch()
não precisamos fazer o uso de iterações, simplificando a leitura e escrita do código.
Não esqueca de deixar suas dúvidas nos comentários e compartilhar este post.