Преобразования Java IntStream

1. Введение

В этом кратком руководстве мы рассмотрим все возможности преобразования IntStream в другие типы .

В дополнение к этому руководству рекомендуется читать интересные материалы о боксе, распаковке или повторении.

2. IntStream в массив

Давайте начнем исследовать , как мы можем преобразовать из IntStream объекта в массив INT s .

Для этого примера давайте сгенерируем первые 50 четных чисел и в результате сохраним их в массиве:

@Test public void intStreamToArray() { int[] first50EvenNumbers = IntStream.iterate(0, i -> i + 2) .limit(50) .toArray(); assertThat(first50EvenNumbers).hasSize(50); assertThat(first50EvenNumbers[2]).isEqualTo(4); }

Во-первых, давайте создадим бесконечный поток целых чисел, начинающийся с 0 и повторяющийся, добавляя 2 к каждому элементу. Сразу после этого нам нужно добавить промежуточный предел операции , чтобы эта операция каким-то образом завершилась.

Наконец, давайте воспользуемся завершающей операцией collect, чтобы собрать этот Stream в массив.

Это прямой способ генерации массива INT с .

3. IntStream в список

Давайте преобразуем теперь в IntStream к списку из Целых .

В этом случае, чтобы добавить больше разнообразия в пример, давайте использовать диапазон метода вместо метода итерации . Этот метод сгенерирует IntStream от int 0 до int 50 (не включен, поскольку это открытый диапазон):

@Test public void intStreamToList() { List first50IntegerNumbers = IntStream.range(0, 50) .boxed() .collect(Collectors.toList()); assertThat(first50IntegerNumbers).hasSize(50); assertThat(first50IntegerNumbers.get(2)).isEqualTo(2); }

В этом примере мы используем диапазон методов . Самая известная часть здесь - это использование метода boxed , который, как следует из его названия, будет упаковывать все элементы int в IntStream и возвращать Stream .

Наконец, мы можем использовать сборщик, чтобы получить список целых чисел s.

4. IntStream в String

Для нашей последней темы, давайте рассмотрим , как мы могли бы получить в строку из IntStream .

В этом случае мы сгенерируем только первые 3 int (0, 1 и 2):

@Test public void intStreamToString() { String first3numbers = IntStream.of(0, 1, 2) .mapToObj(String::valueOf) .collect(Collectors.joining(", ", "[", "]")); assertThat(first3numbers).isEqualTo("[0, 1, 2]"); }

Сначала в этом случае мы создаем IntStream с конструктором IntStream.of () . После получения Stream нам нужно каким-то образом сгенерировать Stream из IntStream . Следовательно, мы можем использовать промежуточный метод mapToObj, который будет принимать IntStream и возвращать Stream типа результирующего объекта, отображаемого в вызываемом методе.

Наконец, мы используем коллектор соединяющий , который принимает поток и может добавить каждый элемент потока , используя разделитель, и , возможно , префикс и суффикс.

5. Выводы

В этом кратком руководстве мы изучили все альтернативы, когда нам нужно преобразовать IntStream в любой другой тип. В частности, мы рассмотрели такие примеры, как создание массива, списка и строки .

И, как всегда, образец кода доступен на GitHub.