• Skip to primary navigation
  • Skip to content

Mauda

IT, Java and Music

Graduação   SCJP   Mestrado
  • Apresentação
  • Certificação Java
  • JPA
    • Exceptions
  • JSF
  • Versionamento
  • Contato

Java 8 – Método forEach() da interface java.lang.Iterable – #MelhoreSeuCodigo

March 25, 2019 by Mauda Leave a Comment

Conteúdo do Post:
  1. Exemplo e contextualização
  2. Antes do Java 8 – Utilizando o forEach
  3. Java 8 – Utilizando o método forEach da interface java.lang.Iterable
  4. Consumer – O que é? Para que serve? O que comem? Onde vivem?
  5. Método forEach
  6. finnaly{

Olá Pessoal, tudo bom?

Começarei a escrever alguns artigos relacionados a alguns métodos que são úteis para o dia a dia. Hoje vamos falar sobre o método forEach() da interface java.lang.Iterable. Veremos como melhorar o código com um exemplo. Veja na continuação:

Exemplo e contextualização

Vamos supor o seguinte exemplo. Suponha que em nosso projeto temos duas classes Album e Artista, conforme Figura 01. Album possui um atributo String titulo e Artista possui um atributo String nome. Além disso, existe uma associação UM para MUITOS entre elas.

Figura 01 – Classes Album e Artista – Representação UML

 

Agora suponha que temos uma classe Ouvinte que possui uma lista de Artistas favoritos, representado pelo seguinte código Java:

Java
1
2
3
4
5
6
7
import java.util.List;
 
public Class Ouvinte {
    private List<Artista> favoritos;
 
    //Outros atributos e códigos não relevantes para o momento
}

Agora temos a seguinte funcionalidade que deve ser construída:

O Ouvinte pode listar todos os nomes dos artistas que ele possui como favoritos!

 

Primeiramente vamos definir uma assinatura para o método que de acordo com a metodologia DDD (Design Domain Driven) estará dentro da própria classe Ouvinte:

Java
1
2
3
public void listarFavoritos(){
    //Codígo para listar
}

Vamos ver como ficaria um código na versão antes do Java 8 e depois um código na versão Java 8.

Antes do Java 8 – Utilizando o forEach

Para esse exemplo será utilizado um forEach com um método que realiza a impressão do nome do artista:

Java
1
2
3
4
5
    public void listarFavoritos(){
        for (Artista artista : this.favoritos) {
            System.out.println(artista.getNome());
        }
    }

A titulo de comentário a impressão está sendo feita no console a fim de não complicar o exemplo.

 

Java 8 – Utilizando o método forEach da interface java.lang.Iterable

O Java 8 trouxe o poder das lambdas expressions e a linguagem funcional. Isso tornou o código mais complexo de ser lido em um primeiro momento, mas que fica bem menos verboso e mais rápido. Assim irei primeiro mostrar o código pronto e depois uma explicação sobre como cheguei a esse ponto.

Java
1
2
3
    public void desfavoritarArtista(String nomeArtista) {
        this.favoritos.forEach(artista -> System.out.println(artista.getNome()));
    }

O forEach sumiu!!! Mas vamos ver isso com mais detalhes.

Consumer – O que é? Para que serve? O que comem? Onde vivem?

Consumer é um dos quatro tipos básicos de interfaces funcionais que são utilizadas pelos métodos funcionais. Ela possui um retorno void e recebe um determinado tipo T para realizar algum “consumo”.

Para criar um consumer é muito parecido com o código que produzimos no exemplo anterior. Ao imprimir o nome do artista, nós estamos aplicando um consumer. Então o primeiro ponto aqui para entender como construir um consumir é pensar na impressão original que fizemos.

Java
1
System.out.println(artista.getNome());

Essa impressão se transformará em um consumer com os seguintes passos:

  • Pegue o nome da variável do forEach, no caso aqui artista.
  • Adicione uma “Flecha” -> (operador para expressões lambdas)
  • Coloque a impressão que foi construída anteriormente.

Dessa forma a nossa impressão do exemplo se transformará em:

Java
1
artista -> System.out.println(artista.getNome())

Como não temos mais a declaração do forEach é necessário criar uma nova variável “artista”, pois o forEach realizada essa declaração. Um detalhe importante aqui é que o nome da variável deve ser diferente que qualquer outra declarada anteriormente no método.

Guarde esse consumer que criamos, pois agora utilizaremos o método forEach.

Método forEach

Chegou a hora de utilizar o método forEach. Agora execute os seguintes passos.

  • Pegue a List em questão. No caso do exemplo a favoritos.
  • A partir dessa lista chame o métodoforEach()
  • Como parâmetro desse método adicione o consumer criado na parte anterior.

Dessa forma, seu resultado final será o seguinte código:.

Java
1
this.favoritos.forEach(artista -> System.out.println(artista.getNome()));

 

finnaly{

Agora aplique esse código com esses passos que rapidamente você já terá aprendido a construir consumers! Não tenha medo de antes fazer o forEach para depois utilizar o método forEach, lembre-se você está aprendendo isso é o mais importante!

Duvidas ou sugestões? Deixe seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!

Até um próximo post!

Filed Under: Collection, Java, JDK 8 Tagged With: Consumer, forEach, interface funcional, Java, Java 8

About Mauda

Mestre em Informática, Analista de Sistemas, Professor, SCJP e Baterista. Desde 2002 trabalhando no mundo Java e ensinando pessoas sobre desenvolvimento de sistemas. Mais informações

Reader Interactions

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Advertisements

Copyright © 2025 · Genesis Framework · WordPress · Log in