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