Java 8 Stream anyMatch() com exemplos
Stream se tem se tornado cada vez mais popular no desenvolvimento em java, neste post vou mostrar como utilizar Stream anyMatch() em Java com exemplos
Última atualização em: | 27607 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 anyMatch()
retorna um valor boolean (true
/false
).
Retorna true se pelo menos um elemento desse fluxo corresponder 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 true, os itens restantes não precisam ser avaliados para determinar que alguns dos itens do stream não condiz com o predicate.
anyMatch() elementos divisíveis por 2
Vamos entender usando um exemplo. Nestes exemplo temos uma lista de inteiros e queremos saber se um dos elementos da lista é divisível por 2. Neste caso utilizamos o anyMatch() para determinar se na lista existe um elemento que seja divisível por 2. Veja:
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
import static org.junit.Assert.assertTrue;
public class StreamAnyMatch {
@Test
public void testAnyMatch() {
// 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().anyMatch(n -> {
System.out.println("Verify: " + n);
return n % 2 == 0;
});
assertTrue(result);
}
}
Ao executar este código, temos a seguinte saída no console:
Verify: 2
Note que foram impressos no console apenas o número 2.
E em seguida temos o teste sendo aprovado. Isso significa que ao executar o predicate para o valor número 2 já foi encontrado o valor que atendeu ao esperado, os itens seguintes foram ignorados. Assim temos o resultado sem passar por todos os itens.
anyMatch() verificar tamanho de String
Vamos ao segundo exemplo onde esperamos encontrar um item em uma lista que tenha uma string com menos de 5 caracteres. Veja:
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
import static org.junit.Assert.assertTrue;
public class StreamAnyMatch {
@Test
public void testAnyMatch() {
// Create list
List<String> ls = Arrays.asList("Receitas", "de", "Código", "Stream", "anyMatch");
boolean result = ls.stream().anyMatch(name -> {
System.out.println("Verify: " + name);
return name.length() < 5;
});
assertTrue(result);
}
}
A saída no console para este teste é:
Verify: Receitas
Verify: de
E em sequencia temos o testes indicando que o valor retornado foi verdadeiro: assertTrue(result);
.
Note que assim que foi encontrada a String
de
na lista, já foi obtido verdadeiro, sem precisar passar por todos os itens.
anyMatch() com objeto
Neste outro exemplo vamos fazer uma checagem em uma lista de pessoas para verificar se existe alguma pessoa com menos de 18
anos. Veja:
import lombok.AllArgsConstructor;
import lombok.Data;
import org.junit.Test;
import java.util.stream.Stream;
import static org.junit.Assert.assertTrue;
public class StreamAnyMatch {
@Test
public void testAnyMatch() {
// Create list
Stream<Person> personStream = Stream.of(new Person("Wolmir", 32), new Person("Cesar", 20));
boolean result = personStream.anyMatch(person -> person.getAge() < 18);
assertFalse(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 contendo pessoas e utilizamos o anyMatch()
para verificar se existe alguma pessoa com menos de 18 anos. Sua execução não imprime nada no console e retorna false
por que ambas as pessoas possuem acima de 18 anos.
Conclusão sobre anyMatch()
Usando um predicate conseguimos verificar se um elemento de uma lista atendem determinado requisito. Com o uso do anyMatch()
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.