Java: преобразование массива в поток

Введение В этом руководстве мы будем преобразовывать массив Java в поток Java для примитивных типов, а также объектов. Это можно сделать как через Arrays.stream (), так и через Stream.of (). Arrays.stream () Хороший способ превратить массив в поток - использовать метод stream () класса Arrays. Это работает одинаково как для примитивных типов, так и для объектов. Примитивные типы Для примитивных типов вы можете использовать Arrays.stream () со ссылкой на массив в качестве параметра. По желанию вы также можете

Вступление

В этом руководстве мы будем преобразовывать массив Java в поток Java для примитивных типов, а также объектов. Это можно сделать как через Arrays.stream () , так и через Stream.of () .

Arrays.stream ()

Хороший способ превратить массив в поток - использовать метод stream() класса Arrays Это работает одинаково как для примитивных типов, так и для объектов.

Примитивные типы

Для примитивных типов вы можете использовать Arrays.stream() со ссылкой на массив в качестве параметра.

При желании вы также можете указать диапазон индексов, которые следует использовать в качестве начальной и конечной точки потока / массива. Если они не указаны, будет преобразован весь массив:

 // Entire array is used for constructing the Stream 
 Arrays.stream(T[] arr) 
 // Construct Stream with a range of elements 
 Arrays.stream(T[] arr,int start_ind_Include,int end_ind_Exclude) 
 ) 

Создадим экземпляр массива и преобразуем его в поток:

 long[] array = {2, 5, 9, 10, 15, 18, 56}; 
 LongStream stream = Arrays.stream(array); 
 System.out.println("Long stream:"); 
 stream.forEach(x -> System.out.print(x + " ")); 

Это приводит к:

 Long stream: 
 2 5 9 10 15 18 56 

Точно так же мы можем создать поток из диапазона индексов (0,4) , указав их в качестве параметров. Обратите внимание, что начальный индекс диапазона включен, а конечный индекс не включается, если диапазон указан:

 LongStream stream = Arrays.stream(array,0,4); 
 System.out.println("\nLong stream from index 0 to 3:"); 
 stream.forEach(x -> System.out.print(x + " ")); 

Это приводит к:

 Long stream from index 0 to 3: 
 2 5 9 10 

Объекты

Для объектов Arrays.stream() возвращает Stream указанного объекта. Он принимает ссылку на массив и, возможно, принимает ряд индексов. Создадим String и преобразуем его в Stream :

 String[] array = new String[]{"John", "Jenny", "Martha", "Adam"}; 
 
 // Create a Stream 
 Stream<String> stream = Arrays.stream(array); 
 System.out.println("Entire array:"); 
 stream.forEach(c -> System.out.println(c)); 
 
 // Create a Stream from a range 
 System.out.println("\nSubarray:") 
 Stream<String> streamWithRange = Arrays.stream(array,0,2); 

Приведенный выше код генерирует следующий вывод:

 Entire array: 
 John 
 Jenny 
 Martha 
 Adam 
 
 Subarray: 
 John 
 Jenny 

Stream.of ()

Примитивные объекты

Вместо использования Arrays мы также можем использовать целевой класс

  • Stream . Метод of() , как следует из названия, создает Stream с заданной коллекцией, такой как массив.

Имейте в виду, Stream.of() возвращает поток объектов , независимо от того, какой тип вы используете. Для примитивных типов вам придется сгладить его. Преобразование / приведение объектов выполняется автоматически, поскольку в этом случае метод Stream.of() просто вызывает Arrays.stream() .

Сделаем примитивный массив int

 int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9}; 
 Stream<int[]> stream = Stream.of(array); 
 System.out.println("\nInt stream: "); 
 // Need to be flattened to its primitive type 
 stream.flatMapToInt(Arrays::stream).forEach(x -> System.out.print(x + " ")); 

Сглаживание выполняется с помощью Arrays.stream() , который в данном случае просто добавляет избыточности коду. Вместо использования Stream.of() для примитивных массивов мы можем использовать для них встроенные классы, такие как IntStream .

Этот код приводит к:

 Int stream: 
 1 2 3 4 5 6 7 8 9 

Объекты

Теперь давайте создадим Stream типа String . Затем мы отфильтруем только имена, начинающиеся с буквы «J»:

 String[] array = new String[]{"John", "Jenny", "Martha", "Adam"}; 
 
 Stream<String> stream = Stream.of(array); 
 System.out.println("Printing only names that start with 'J'..."); 
 stream.filter(string -> string.startsWith("J")) 
 .forEach(string -> System.out.pritnln(string)); 

Код имеет следующий вывод:

 Printing only names that start with 'J'... 
 John 
 Jenny 

Заключение

В этой статье мы рассмотрели два способа создания Stream из массива. Это касается как примитивных массивов, так и массивов объектов.

Метод Arrays.stream() - простой метод, который принимает ссылку на массив и необязательный диапазон. Метод Stream.of() вызывает Arrays.stream() для типов объектов, в то время как он требует сглаживания для примитивных типов.

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus