Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Dúvida no getTempoTotal utilizando o JAVA 8

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();
4 respostas

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 :-(

solução!

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!