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();
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!