Рубрики
Без рубрики

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

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

Автор оригинала: Mehreen Saeed.

Вступление

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

Массивы.поток()

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

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

Для примитивных типов можно использовать 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() возвращает Поток указанного объекта. Он принимает ссылку на массив и, при необходимости, принимает диапазон индексов. Давайте создадим Строку массив и преобразуем его в Поток :

String[] array = new String[]{"John", "Jenny", "Martha", "Adam"};

// Create a Stream
Stream 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 streamWithRange = Arrays.stream(array,0,2);

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

Entire array:
John
Jenny
Martha
Adam

Subarray:
John
Jenny

Поток.из()

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

Вместо использования класса Массивы мы также можем использовать класс цели – Поток . Метод of () , как следует из названия, создает Поток с заданной коллекцией, такой как массив.

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

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

int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
Stream 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

Объекты

Теперь давайте создадим Поток типа Строка|/. Затем мы отфильтруем только имена, начинающиеся на букву "J":

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

String[] array = new String[]{"John", "Jenny", "Martha", "Adam"};

Stream 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

Вывод

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

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