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