Percorrendo listas antes e depois do Java 8
Tags: java, programming, tutorial, beginners
Published: 2021-12-11 19:31:26

## Introdução
Percorrer listas e operar sobre os seus elementos é uma necessidade frequente no dia a dia de um desenvolvedor Java. O objetivo deste artigo é apresentar as diferentes maneiras que a linguagem fornece para fazermos isso, destacando as novas possibilidades introduzidas a partir da versão 8.

## Lista a ser percorrida
A lista que devemos percorrer é formada por _strings_ que representam o nome de algumas frutas. Neste exemplo, foi utilizada a classe _ArrayList_ como implementação da interface _List_:

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

frutas.add("Banana");
frutas.add("Laranja");
frutas.add("Acerola");
frutas.add("Limão");
frutas.add("Maracujá");
```

O nome de cada fruta deve ser impresso em uma linha, de forma que tenhamos o seguinte resultado no console:

```java
Banana
Laranja
Acerola
Limão
Maracujá
```

Como podemos fazer isso? Vejamos nas próximas seções as alternativas possíveis.

### Percorrendo a lista antes do Java 8
Antes da introdução da versão 8 do Java, poderíamos percorrer a nossa lista e imprimir seus elementos utilizando _Iterator_, _ListIterator_, _for_ ou _Enhanced for_, como mostrado a seguir:

#### _Iterator_

```java
Iterator<String> iterator = frutas.iterator();

while (iterator.hasNext()) {
    String fruta = iterator.next();
    System.out.println(fruta);
}
```

#### _ListIterator_ 

```java
ListIterator<String> listIterator = frutas.listIterator();

while (listIterator.hasNext()) {
    String fruta = listIterator.next();
    System.out.println(fruta);
}
```


#### _for_

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

#### _Enhanced for_

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

### Percorrendo a lista depois do Java 8
Com a introdução do Java 8, podemos obter o mesmo resultado de forma mais simples e direta, utilizando _forEach_, _lambda expression_ e _method reference_, conforme apresentado abaixo:

#### _forEach_ com _lambda expression_

```java
frutas.forEach(fruta -> System.out.println(fruta));
```

#### _forEach_ com _method reference_

```java
frutas.forEach(System.out::println);
```

Que diferença, não é mesmo? Com os recursos do Java 8, o código ficou mais enxuto e legível. Lembre-se deles sempre que uma lista aparecer na sua frente!

## Conclusão
Neste artigo, vimos diferentes formas de percorrer uma lista em Java e imprimir seus elementos. Percebemos que os novos recursos do Java 8 permitiram escrever um código mais simples e fácil de entender. Para saber mais, consulte os links disponíveis na bibliografia. Um abraço e até a próxima!

## Bibliografia
[List](https://docs.oracle.com/javase/8/docs/api/java/util/List.html)
[ArrayList](https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html)
[Iterator](https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html)
[ListIterator](https://docs.oracle.com/javase/8/docs/api/java/util/ListIterator.html)
[for](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html)
[Enhanced for](https://docs.oracle.com/javase/8/docs/technotes/guides/language/foreach.html)
[forEach (Iterable)](https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html#forEach-java.util.function.Consumer-)
[Lambda Expressions](https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html)
[Method References](https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html)