Автор оригинала: 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 Streamstream = 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}; Streamstream = 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"}; Streamstream = 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()
для типов объектов, в то время как для примитивных типов требуется выравнивание.