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!