0

Iterando elementos com for each

W
Willyan Caetano

Ei dev, tudo bem !?


Hoje vou explicar um pouquinho de como eu uso o recurso de for-each no Java.


O for-each ou enhanced for como é chamado o recurso nada mais é que percorrer todos os elementos de um array ou collection (List, Map, Set). Ele é um recurso da versão 5 do Java e antes disso só era possível fazer iterações das duas formas abaixo:


List<String> frutas = new ArrayList<String>();

frutas.add("Maçã");
frutas.add("Banana");
frutas.add("Pêssego");

for (int i=0; i < frutas.size(); i++) {
  String fruta = frutas.get(i);
  System.out.println(fruta);
}


Ou assim, usando Iterator:

List<String> frutas = new ArrayList<String>();

frutas.add("Maçã");
frutas.add("Banana");
frutas.add("Pêssego");
 
for (Iterator<String> i = frutas.iterator(); i.hasNext();) {
   String fruta = i.next();
   System.out.println(fruta);
}


Com o lançamento da versão 5 foi introduzido o for-each, que nos possibilita uma sintaxe mais limpa e menos verbosa:


List<String> frutas = new ArrayList<String>();

frutas.add("Maçã");
frutas.add("Banana");
frutas.add("Pêssego");

for (String fruta : frutas) {
  System.out.println(fruta);
}


Viu só ? Além de diminuir a escrita de código, a leitura também foi facilitada. O exemplo acima você poderia ler algo como "Para cada fruta na lista 'frutas' imprima no console seu valor".


Além de List, podemos utilizar o for-each para as demais implementações das collections, como Set e Map e até para arrays. Veja os exemplos:


Usando Set

Set<String> frutas = new HashSet<String>();

frutas.add("Maçã");
frutas.add("Banana");
frutas.add("Pêssego");

for (String fruta : frutas) {
  System.out.println(fruta);
}

Lembre-se que se tratando de Set não existe ordem, ou seja, não é possível que os elementos sejam apresentados sempre na ordem em que foram inseridos.


Usando Map

Map<String, String> frutasMapa = new HashMap<String, String>();

frutasMapa.put("M", "Maçã");
frutasMapa.put("B", "Banana");
frutasMapa.put("P", "Pêssego");

for (Map.Entry<String, String> entradaMapa : frutasMapa.entrySet()) {
  System.out.println(entradaMapa);
}

Para mapas a história muda um pouco. Como essa estrutura é chave-valor é necessário usar o método entrySet() para devolver a estrutura de dados que aquele mapa possui. Merece um tópico a parte mapas e suas formas de iteração.


Usando arryas

String[] frutas = new String[]{"Maçã", "Banana", "Pêssego"};

for (String fruta : frutas) {
  System.out.println(fruta);
}


Com Java 8 adiante


Com o advento da API de Streams no Java o for-each ficou ainda mais prático. Ele se tornou também uma operação, podendo ser chamado numa única linha, veja:


List<String> frutas = new ArrayList<String>();

frutas.add("Maçã");
frutas.add("Banana");
frutas.add("Pêssego");

frutas.stream().forEach(System.out::println)



Referências

  • https://stackoverflow.com/questions/85190/how-does-the-java-for-each-loop-work
  • https://docs.oracle.com/javase/8/docs/technotes/guides/language/foreach.html
  • https://docs.oracle.com/javase/8/docs/technotes/guides/collections/overview.html
  • https://www.oracle.com/br/technical-resources/articles/java-stream-api.html
0
0

Comentários (0)

None

Brasil