Instream и Stream - PullRequest
       3

Instream и Stream

0 голосов
/ 09 ноября 2018

Какая разница между этими двумя? Это одно и то же?

In Stream API

Фильтр

Stream<T> filter(Predicate<? super T> predicate)

Возвращает поток, состоящий из элементов этого потока, соответствующих данному предикату.

Это промежуточная операция.

mapToInt

IntStream mapToInt(ToIntFunction<? super T> mapper)

Возвращает IntStream, состоящий из результатов применения данной функции к элементам этого потока.

Это промежуточная операция.

Filter возвращает stream, а mapToInt возвращает IntStream.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Это одно и то же?
Оба расширяются BaseStream. Таким образом, они имеют общий интерфейс. Но методы filter и mapToInt не принадлежат этому интерфейсу.

В чем разница между этими двумя?
Stream<T> - это Stream из T, где T - это параметр общего типа Stream. Поскольку параметр универсального типа не может иметь тип примитива в качестве аргумента типа, нет способа объявить Stream<int>. Чтобы иметь поток примитивных целых чисел, был определен выделенный тип IntStream.

Если у вас есть Stream<Integer> и вы хотите использовать методы, которые предлагает тип IntStream (то есть min(), toArray()), вам нужно сначала преобразовать элементы Integer в элементы int. Это задача метода mapToInt, который применяется к Stream<T> и возвращает IntStream. Для преобразования элементов в int этот метод требует Function, который выполняет фактическое отображение / преобразование.

Например:

    int[] arrayOfPositiveInts = Stream.of(0, 1, 2, 3, 4)
            .filter(i -> i > 0)
            .mapToInt(Integer::intValue)
            .toArray();

Здесь показан метод filter, который применяется к Stream<Integer>, но использует распаковку для сравнения элементов Integer с int 0. Метод mapToInt использует метод Integer.intValue() для явного возврата Integer соответствующего int значения.

Из-за распаковки вы также можете использовать:

.mapToInt(i -> i)

Но Function.identity(), чья реализация делает то же самое, не будет работать:

.mapToInt(Function.identity()

потому что это ( JavaDoc ):

всегда возвращает входной аргумент.

Тип Stream равен Integer, тогда как mapToInt ожидает int.

Подведение итогов:
Разница между Stream и IntStream (согласно названию этого вопроса) заключается в типе потоковых элементов. Stream обрабатывает произвольные ссылочные типы . IntStream - это выделенный тип с элементами примитива int. И, конечно, оба типа предлагают разные методы.

0 голосов
/ 09 ноября 2018

IntStream -> Stream только int

Stream -> Stream из Objects (любые объекты, включая Integer, Double, Long,String и т. Д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...