Iterando uma lista em Java

(Última atualização em: 20 de fevereiro de 2016)

Tenho uma lista com todos os livros que comprei e quero saber quanto eu gastei no total:

List<Livro> compras = new ArrayList<Livro>();

compras.add(new Livro("Java", 25.50));
compras.add(new Livro("HTML e CSS", 21.30));
compras.add(new Livro("Android", 22.54));

Agora vou varrer minha lista e somar o preço de cada livro usando um for:

double total = 0;
		
for (int i = 0; i < compras.size(); i++) {
     total = total + compras.get(i).getPreco();
}

Resultado:

69.34

Agora eu sei quanto gastei!
Porém, olha o tanto de parâmetro e código que tive que escrever…será que não tem uma forma mais simples de resolver? A partir do Java 1.5 foi disponibilizado o enhanced-for ou mais conhecido como foreach:

double total = 0;
		
for (Livro livro : compras) {
     total = total + livro.getPreco();
}

Resultado:

69.34

Veja que temos o mesmo resultado! Mas o que está acontecendo nesse código? Basicamente estamos pegando cada objeto(livro) contido na lista, ou seja, para cada (for each) livro some o seu preço com o total. Bem intuitivo e simples! Poderíamos até imprimir todos os livros usando o foreach:

for (Livro livro : compras) {
     System.out.println(livro.getNome());
}

Resultado:

Java
HTML e CSS
Android

A partir do Java 8 foi introduzido o método forEach() capaz de fazer iterações em lista de forma similar ao enhanced-for:

compras.forEach(livro -> System.out.println(livro.getNome()));

Resultado:

Java
HTML e CSS
Android

Bem mais simples! E tudo em uma única linha!

E aí, gostou dessa nova implementação do Java 8? Quer conhecer mais sobre as novidades do Java 8? O criador da Caelum, Paulo Silveira, criou o curso de Java 8 e suas bibliotecas com mais 1500 alunos e 99% recomendação.

Content Editor at Alura and Software Developer

  • rico

    muito bem explicado. gostei!!!

    • Obrigado pelo comentário Rico! Fico feliz em ajudá-lo 🙂

  • Fanime

    Legal, porém poderia ter ido além e ter demonstrado o primeiro exemplo, da soma, usando a api Stream do Java 8.

  • Alexandre

    Sinto um cheiro do Groovy nesta nova api ou estou errado?

Próximo ArtigoComo justificar um bom design ou identificar erros em uma composição visual