Научитесь преобразовывать поток в массив и наоборот в Java. Мы научимся преобразовывать примитивы, а также типы Object.
String[] stringArray = {"a", "b", "c", "d", "e"};// массив -> потокПоток<Строка> strStream = Arrays.stream(stringArray);// поток -> массивСтрока[] stringArray = stream.toArray(Строка[]::новый);
Обратите внимание, что Java Stream API предоставляет следующие специализированные классы для потока примитивов. Эти классы поддерживают множество полезных последовательных и параллельных агрегатных операций, таких как sum() и average(). Рассмотрите возможность использования этих классов для хранения потока примитивов для лучшей совместимости с другими API.
- IntStream – Поток значений типа int
- LongStream – Поток длинных значений
- DoubleStream – Поток двойных значений
1. Преобразование массива в поток
1.1 Синтаксис метода
Основной метод преобразования массива в поток элементов — Arrays.stream(). Это перегруженный метод.
- Stream<T> stream(T[] array) : возвращает последовательный поток с указанным массивом в качестве источника.
- Stream<T> stream(T[] array, int start, int end) : возвращает последовательный поток элементов массива от начальных позиций индекса(включительно) до конечных(исключая).
Давайте рассмотрим его использование на следующих примерах.
1.2. Примитивный массив для потоковой передачи
Программа на Java для преобразования массива int в IntStream.
int[] primitiveArray = {0,1,2,3,4};IntStream intStream = Arrays.stream(primitiveArray);
Программа на Java для преобразования массива int в поток целочисленных объектов.
int[] primitiveArray = {0,1,2,3,4};Stream<Integer> integerStream = Arrays.stream(primitiveArray).boxed();
1.3. Массив объектов для потоковой передачи
Программа Java для преобразования массива объектов в поток объектов. Мы можем применить этот подход к любому типу объектов, включая объекты Java(String, Integer и т. д.) или пользовательские объекты(User, Employee и т. д.).
String[] stringArray = {"a", "b", "c", "d", "e"};Stream<String> strStream = Arrays.stream(stringArray);
2. Преобразование потока в массив
2.1 Синтаксис метода
Основной метод преобразования потока в массив — Stream.toArray(). Это также перегруженный метод.
- Object[] toArray() : возвращает массив, содержащий элементы указанного потока. По умолчанию тип возвращаемого значения этого метода — Object[].
- T[] toArray(IntFunction<T[]> generator) : возвращает массив, содержащий элементы этого потока, используя предоставленную функцию генератора. Генератор создает новый массив нужного типа и предоставленной длины.
Давайте разберемся с использованием метода toArray() на нескольких примерах.
2.2. Поток в примитивный массив
Программа на Java для получения потока целых чисел из IntStream.
IntStream intStream = Arrays.stream(new int[]{1,2,3});int[] primitiveArray = intStream.toArray();
Программа Java для преобразования потока целых чисел в примитивный массив int. Обратите внимание, что mapToInt() возвращает экземпляр типа IntStream. А IntStream.toArray() возвращает int[]. Вот почему мы не используем никакую функцию-генератор.
Stream<Integer> integerStream = Arrays.stream(new Integer[]{1,2,3});int[] primitiveArray = integerStream.mapToInt(i -> i).toArray();
2.3. Поток в массив объектов
Программа Java для преобразования потока объектов в массив объектов. Она применима ко всем классам Java и пользовательским объектам. По умолчанию toArray() вернет Object[]. Чтобы получить String[], мы используем функцию-генератор String[]::new, которая создает экземпляр массива String.
Stream<String> strStream = Arrays.stream(new String[]{});String[] stringArray = strStream.toArray(String[]::new);
3. Заключение
В этом коротком уроке мы научились преобразовывать поток элементов в массив элементов, включая примитивы и сложные типы объектов. Мы научились использовать методы Arrays.stream() и Stream.toArray() и их примеры.
Мы также узнали, что обычно рекомендуется использовать специализированные классы, такие как IntStream, для потока примитивных значений. Эти классы предоставляют пользовательские методы для примитивных типов и множество полезных служебных методов.