Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] lambda

Olá boa noite, como vai? Gosto muito de utilizar o lambda, usei quando estava estudando / desenvolvendo em c#. perguta a) Levando em consideração: temporadas.forEach(t - > t.episodios().forEach(e - > System.out.println(e.titulo()))); Acredito que se lê: para cada temporada e para cada episodios de cada temporada, imprimir o título. Mas o título não é um atributo do objeto temporada. Como que a IDE deixou escrever sem dar erro ?

Obrigado, Mauricio Gomes

1 resposta
solução!

Olá Maurício, tudo bem?

Você interpretou corretamente o trecho:

temporadas.forEach(t -> t.episodios().forEach(e -> System.out.println(e.titulo())));
  1. temporadas é uma lista de objetos do tipo Temporada.
  2. Para cada temporada (t), ele chama t.episodios(), que aparentemente retorna uma lista de episódios.
  3. Em seguida, faz um forEach nessa lista de episódios, e para cada episódio (e), imprime o título: e.titulo().

Mas por que isso funciona se titulo não está em Temporada?

Porque titulo() está no objeto Episodio, não em Temporada.

O ponto-chave é que:

  • Você não está acessando titulo() diretamente de Temporada, mas sim do retorno de t.episodios(), ou seja, da lista de Episodio.
  • A IDE entende que t.episodios() retorna uma coleção de Episodio, e que Episodio tem o método titulo().

Em resumo:

A IDE (e o compilador) não dá erro porque:

  • t.episodios() retorna uma lista de objetos Episodio.
  • Cada Episodio tem o método titulo().
  • A sintaxe com lambdas está correta.

Se você tentar chamar t.titulo() diretamente, aí sim daria erro, porque titulo() não existe em Temporada.