Объединение двух 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++;
}