Как конвертировать Stream <int []> в Stream <Integer> - PullRequest
0 голосов
/ 11 января 2019

Есть ли способ конвертировать Stream<int[]> в Stream<Integer>

int[] arr2 = new int[] { 54, 432, 53, 21, 43 };
// Below gives me Stream<int[]> 

Stream.of(arr2);  // I want to convert it to Stream<Integer>

Ответы [ 5 ]

0 голосов
/ 11 января 2019

В этом случае существует проблема.

Давайте к примеру. Если у вас есть массив примитивов и вы пытаетесь создать поток напрямую, у вас будет поток из одного объекта массива, подобный этому:

// Arrays of primitives 
int[] nums = {1, 2, 3, 4, 5}; 
Stream.of(nums); // One element int[] | Stream<int[]> 

Для решения этой проблемы вы можете использовать:

Arrays.stream(nums).count();  // Five Elements 
IntStream.of(nums).count(); // Five Elements
0 голосов
/ 11 января 2019

Вы можете использовать либо Arrays.stream()

Arrays.stream(arr2).boxed();  // will return Stream<Integer>

Или IntStream.of

IntStream.of(arr2).boxed();   // will return Stream<Integer>

Поток <<strong> Целое число > в штучной упаковке ()

Возвращает поток, состоящий из элементов этого потока, каждый из которых упакован в целое число.

Это промежуточная операция.

0 голосов
/ 11 января 2019

Вы можете использовать это:

Integer[] arr = Arrays.stream(arr2).boxed().toArray(Integer[]::new);
0 голосов
/ 11 января 2019

Вы можете создать поток из io.vavr с помощью

Stream.ofAll(arr2)

но вы хотите использовать поток целых чисел, вы должны использовать IntStream. Вы можете создать IntStream из массива следующим образом:

Arrays.stream(arr2)
0 голосов
/ 11 января 2019

бокс поток:

Arrays.stream(arr2).boxed();
...