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

Вступление

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

Arrays.stream()

Хороший способ превратить массив в поток – это использовать метод stream() класса Arrays.

Простые типы

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

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


Arrays.stream(T[] arr)  
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"};


Stream<String> stream = Arrays.stream(array);
System.out.println("Entire array:");
stream.forEach(c -> System.out.println(c));


System.out.println("\nSubarray:")
Stream<String> streamWithRange = Arrays.stream(array,0,2);

Вывод следующий:

Entire array:
John
Jenny
Martha
Adam

Subarray:
John
Jenny

Stream.of()

Простые объекты

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

Имейте в виду, 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: ");
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”:

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

Заключение

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

Ответить