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

Wolmir Cezer Garbin por Wolmir Cezer Garbin - - Java - TUTORIAL

Última atualização em: | 25658 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.


Apoiadores

Publique seu post no Receitas de Código

Aguarde, estamos trabalhando para que você possa publicar sua postagem no Receitas de Código!