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

Por que utilizar o método mapTo... para operações com numeros?

E o que de fato esse método faz?

2 respostas
solução!

Oi Geovane, tudo certo?

Imagine que desejamos mapear a quantidade de alunos dos nossos cursos:

cursos.stream()
        .map(c -> c.getAlunos());

O resultado disso é um Stream de Integer:

Stream<Integer> qtdAlunos = cursos.stream()
                .map(c -> c.getAlunos());

Como o atributo alunos da classe Curso é um int (primitivo), será necessário fazer um boxing desses valores inteiros para Integer.

Isso pode trazer um overhead desnecessário, especialmente em listas muito grandes.

O mapToInt(), por exemplo, irá gerar um IntStream, que consegue lidar com os números inteiros sem a necessidade de fazer box para Integer, por exemplo:

IntStream qtdAlunos = cursos.stream()
                .mapToInt(c -> c.getAlunos());

Além disso, você ganha algumas operações que podem ser utilizadas com um IntStream, e que só fazem sentido ser realizadas em inteiros, como o método sum(), que não está disponível no Stream:

int totalDeAlunos = cursos.stream()
                .mapToInt(c -> c.getAlunos())
                .sum();

O mesmo se aplica para o mapToDouble(), que retorna um DoubleStream, e lida com o primitivo double. Possui métodos como o average(), para calcular a média aritmética dos elementos.

Além dos dois existe também o LongStream, retornado pelo método mapToLong().

Faz sentido? Abraço!

Certo, valeu!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software