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

Есть простые решения для объединения двух 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[].

Ответы

Ответ 1

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

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

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

Здесь вывод.

[1, 34, 3, 1, 5]

Ответ 2

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

int[] m = IntStream.concat(IntStream.of(c), IntStream.of(d)).toArray();

Ответ 3

Используйте для циклов, чтобы избежать использования 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++;
}