Bom dia, não entendi muito bem o que faz esse método utilizando o Java 8, poderia me explicar cada ponto dele(.stream() e o .mapToInt()):
this.aulas.stream().mapToInt(Aula::getTempo).sum();
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Bom dia, não entendi muito bem o que faz esse método utilizando o Java 8, poderia me explicar cada ponto dele(.stream() e o .mapToInt()):
this.aulas.stream().mapToInt(Aula::getTempo).sum();
Oi Jéssica, tudo bem ?
O Stream é como se fosse um fluxo de dados, a melhor forma de pensar nele é associar como se fosse uma torneira e o que vai passar por essa torneira são os objetos da sua lista.
Quando fazemos o mapToInt, estamos falando que para cada objeto que passar vai se tornar um novo stream de inteiros, por isso falamos que para cada aula vamos chamar o getTempo e no com todo fluxo definido a gente chama o método sum, que vai somar todos os valores.
Desculpa mas ainda não entendi :-(
Olá Jéssica, tudo bem?
Imagina a seguinte situação: Dada uma lista de aulas, somas o tempo de todas as aulas.
Pensando antes do Java 8, precisamos percorrer cada um dos elementos dessa lista, pegar o tempo de cada uma das aulas e acumular em algum lugar. Algo como:
int tempoTotal = 0;
for(Aula aula : aulas) {
tempoTotal += aula.getTempo();
}
Essa é a forma declarativa de fazer, onde a forma que percorremos a lista fica explícita, bem como a variável onde acumulamos a soma.
A partir do Java 8 ganhamos algumas outras formas de fazer operações em cima de coleções (como listas). Essas operações são normalmente feitas por meio dos Streams, que conseguem operar em cima das coleções. O mesmo código acima, utilizando as funcionalidades do Java 8, ficaria da forma que você viu no curso:
this.aulas.stream().mapToInt(Aula::getTempo).sum();
Seria: dado a lista de aulas, cria um Stream (fluxo), pega o tempo das aulas, e em seguida soma todos esses tempos.
O método stream() é o que te retorna o Stream, que é a estrutura que vai te permitir fazer as operações em cima da lista.
O método mapToInt() é justo para pegar o tempo de cada aula, como um valor inteiro.
Em seguida o sum() vai somar todos os valores.
Faz sentido?
--
Recomendo o curso de Java 8 aqui da Alura, e este artigo do blog da caelum.
Abraço!
Obrigada Matheus e Lucas pelas explicações, ficou mais claro!