Ответ 1
Java 8 stream framework имеет общий Stream<T>
для объектов как элементов и три примитивных потока IntStream
, LongStream
, DoubleStream
для основных трех примитивов. Если вы работаете с примитивами, используйте один из них, в вашем случае IntStream.
Смотрите изображение:
Что скрывается за тем, что:
-
Java generics не может работать с примитивными типами: возможно иметь только
List<Integer>
иStream<Integer>
, но неList<int>
Stream<int>
-
Когда была введена рамка Java Collections, она была введена только для классов, поэтому, если вы хотите иметь
List
изint
s, вы должны обернуть их вInteger
s. Это дорого! -
Когда была внедрена инфраструктура Java Streams, они решили обойти эти накладные расходы и параллельно с "класс-ориентированными" потоки (используя механизм generics), они ввели три дополнительных набора всех функций библиотеки, специально предназначенных для наиболее важных примитивных типов:
int
,long
,double
.
И посмотрите также чудесное объяснение здесь: fooobar.com/info/106770/...