Article image
MARCELO MORAES
MARCELO MORAES25/10/2022 13:20
Compartilhe

Lambda Expression ou Method Reference? Vamos entender?

  • #Java

Este artigo foi baseado no artigo "Lambda ou method reference? entenda a diferença" 

da Alura e por mim adaptado.

Este post faz parte do desafio proposto no bootcamp: Potencia Tech - iFood Java Beginners.

Qual a melhor opção? Lambda ou Method Reference?

Vantagens de usar um ou outro?

E em relação à performance?

Vamos tentar responder essas questões referentes ao uso de Lambda e Method Reference.

Uma função nominal tem a seguinte assinatura:

nomeFuncao(parametros){
  //corpo;
};

Exemplo:

int adicionarNumeros(int numero1, int numero2) {
  return numero1 + numero2;
}

O Java 8 trouxe muitas novas funcionalidades e dentre elas a possibilidade de

podermos usar os recursos de Lambda e Method Reference.

Essas novas funcionalidades nos ajudam a reduzir a quantidade de código a ser escrito

e a fazer reuso de código e simplificação do mesmo.

image

Vamos a um exemplo de ambos para podermos entender melhor, e depois 

vamos fazer algumas consideraçãoes a respeito.

Supondo que tenhamos uma lista de objetos e desejamos imprimí-la no console:

Código puro:

List<String> objetos = Arrays.asList(“bola”, “lanterna”, “caneta”, "faca"); 
  forEach(String objeto : objetos) { 
      System.out.print(objeto); 
  } 

Como saída obteríamos:

bola lanterna caneta faca

Agora vamos usar Lambda:

objetos.forEach(objeto -> System.out.print(objeto));

O mesmo poderia ser feito usando Method Reference:

objetos.forEach(System.out::print);

Obteríamos a mesma saída que quando feito com código puro.

Comparando Lambda com Method Reference:

image

image

Então agora podemos considerar as perguntas feitas no início.

Qual delas é a melhor opção?

A resposta é depende! Depende do caso em que estamos utilizando.

Nem sempre é possível substituir um Lambda por um Method Reference.

Para conseguir fazer uma chamada a um Reference Method é necessário que a invocação 

de método da direita receba os mesmos parâmetros da esquerda do lambda, 

caso contrário não é possível substituir.

Vantagens de usar Method Reference?

Apesar de não poder substituir o Lambda em todas as ocasiões,uma das 

principais vantagem do Reference é em facilitar ainda mais a legibilidade do código, devido ao uso de menos símbolos.

Outra vantagem é a de estender os métodos dos tipos que estão sendo utilizados.

Por exemplo se temos uma classe Pessoa com o método getIdade(): 

ao instanciar o objeto p poderiamos usar:

p -> p.getIdade(); 

ou ainda melhor:

Pessoa::getIdade

Performance?

Pensando na questão de performance o lambda faz uma chamada de método a 

mais do que o Method Reference para executar o método, e as duas abordagens 

resultam em bytecodes diferentes, entretanto para a maioria dos casos essa 

diferença não chega a afetar performance. 

Somente em sistemas mais críticos onde a performance é essencial, é que 

precisa ser levada em consideração.

Desde já:

Obrigado por ler este artigo.

Aceito sugestões para melhorias.

Se gostou, dá um suporte no artigo pra me ajudar.

Compartilhe
Comentários (4)
Juarez Junior
Juarez Junior - 25/10/2022 19:18

Deu para entender bem, obrigado!

Igor Santos
Igor Santos - 25/10/2022 18:39

Muito bom, obrigado!

Roberto Oliveira
Roberto Oliveira - 25/10/2022 17:29

Excelente Marcelo pelo conteúdo, ajuda muito !

Rodrigo Ferreira
Rodrigo Ferreira - 25/10/2022 16:47

Muito bom conteúdo, me ajudou bastante obrigado.