IntStream
- это специализация Stream<T>
, которая обрабатывает int primitive
значения.
Посмотрите на IntStream
интерфейс:
IntStream filter(IntPredicate predicate);
IntStream map(IntUnaryOperator mapper);
...
Вы можете видеть, что этот интерфейс использует только int primitive
специализированную версию Predicate
, Function
, Consumer
... поэтому для работы с int не требуется бокс (поскольку он работает напрямую с int)
О стоимости производительности автобокса вы можете обратиться к java guide :
Нельзя использовать автобокс и распаковку для научных вычислений или другой чувствительный к производительности цифровой код
Это потому, что каждый раз, когда вы вызываете операцию, требуется либо int
или Integer
, либо помещение int
в контейнер Integer
, компилятор вводит для вас вызов метода box / unbox.
Производительность довольно незначительна для обычных операций, но если у вас интенсивные циклы или критичные по времени строки кода, вам следует избегать автобоксирования.