Iterar sobre um mapa em Java

Iterar sobre um mapa em Java

1. Visão geral

Neste artigo rápido, daremos uma olhada nas diferentes maneiras de iterar por meio das entradas de um Mapa em Java.

Simplificando, podemos extrair o conteúdo de um mapa usandokeySet(), valueSet() ouentrySet(). Como esses são todos os conjuntos, princípios de iteração semelhantes se aplicam a todos eles.

The Map.entrySet [.s1] # API retorna uma visão de coleção do mapa, cujos elementos são da classeMap. The only way to obtain a reference to a single map entry is from the iterator of this collection view. #

Theentry.getKey() retorna a chave eentry.getValue() retorna o valor correspondente.

Vamos dar uma olhada em alguns deles.

2. EntrySet eFor Loop

Primeiro, vamos ver comoiterate through a Map using the Entry*Set*:

public void iterateUsingEntrySet(Map map) {
    for (Map.Entry entry : map.entrySet()) {
        System.out.println(entry.getKey() + ":" + entry.getValue());
    }
}

Aqui, estamos convertendo nosso mapa em um conjunto de entradas e, em seguida, iterando-as usando a abordagem clássica para cada.

Podemos acessar uma chave de cada entrada chamandogetKey() e podemos acessar um valor de cada entrada chamandogetValue().

 

3. Iterator eEntrySet

Outra abordagem seria obter um conjunto de entradas e executar a iteração usando umIterator:

public void iterateUsingIteratorAndEntry(Map map) {
    Iterator> iterator = map.entrySet().iterator();
    while (iterator.hasNext()) {
        Map.Entry entry = iterator.next();
        System.out.println(entry.getKey() + ":" + entry.getValue());
    }
}

Observe como podemos obter a instânciaIterator usando a APIiterator() deentrySet(). Então, como de costume, percorremos o iterador comiterator.next().

4. Com Lambdas

Vamos agora ver como iterar aMap usando expressõeslambda.

Como a maioria das outras coisas em Java 8, isso acaba sendo muito mais simples do que as alternativas; usaremos o métodoforEach():

public void iterateUsingLambda(Map map) {
    map.forEach((k, v) -> System.out.println((k + ":" + v)));
}

Nesse caso, não precisamos converter um mapa em um conjunto de entradas. Para aprender mais sobre expressões lambda, você podestart here.

5. APIStream

APIStream é um dos principais recursos deJava 8. Podemos usar esse recurso para fazer um loop porMap também, mas como nos exemplos anteriores, precisamos primeiro obter um conjunto de entradas:

public void iterateUsingStreamAPI(Map map) {
    map.entrySet().stream()
      // ...
      .forEach(e -> System.out.println(e.getKey() + ":" + e.getValue()));
}

Isso deve ser usado quando estamos planejando fazer algum processamento adicional deStream. Caso contrário, é apenas um simplesforEach(), conforme descrito anteriormente.

Para saber mais sobre a APIStream, verifiquethis article.

6. Conclusão

Neste tutorial, nos concentramos em uma operação simples, mas crítica - iterar por meio das entradas de um mapa.

Vimos alguns métodos que podem ser usados ​​apenas com Java 8, a saber, expressões Lambda e a APIStream.

Como sempre, os exemplos de código no artigo podem ser encontradosover on GitHub.