Объединение двух int [] - PullRequest
       7

Объединение двух int []

0 голосов
/ 25 февраля 2019

Существуют простые решения для объединения двух String[] или Integer[] в Java с помощью Streams.Так как int[] часто используется.Есть ли прямой способ объединения двух int[]?

Вот моя мысль:

int[] c = {1, 34};
int[] d = {3, 1, 5};
Integer[] cc = IntStream.of(c).boxed().toArray(Integer[]::new);
Integer[] dd = Arrays.stream(d).boxed().toArray(Integer[]::new);
int[] m = Stream.concat(Stream.of(cc), Stream.of(dd)).mapToInt(Integer::intValue).toArray();
System.out.println(Arrays.toString(m));

>>
[1, 34, 3, 1, 5]

Это работает, но на самом деле он конвертирует int[] в Integer[], а затем снова конвертирует Integer[] обратно в int[].

Ответы [ 3 ]

0 голосов
/ 25 февраля 2019

Вы можете просто объединить примитивные (int) потоки, используя IntStream.concat как:

int[] m = IntStream.concat(IntStream.of(c), IntStream.of(d)).toArray();
0 голосов
/ 26 февраля 2019

Используйте для циклов, чтобы не использовать toArray ().

int[] e = new int[c.length+d.length];
int eIndex = 0;
for (int index = 0; index < c.length; index++){
    e[eIndex] = c[index];
    eIndex++;
}
for (int index = 0; index < d.length; index++){
    e[eIndex] = d[index];
    eIndex++;
}
0 голосов
/ 25 февраля 2019

Вы можете использовать IntStream.concat совместно с Arrays.stream, чтобы выполнить эту задачу без какого-либо автобокса или распаковки.Вот как это выглядит.

int[] result = IntStream.concat(Arrays.stream(c), Arrays.stream(d)).toArray();

Обратите внимание, что Arrays.stream(c) возвращает IntStream, который затем объединяется с другим IntStream перед сбором в массив.

Вот вывод.

[1, 34, 3, 1, 5]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...