E o que de fato esse método faz?
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!
E o que de fato esse método faz?
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!