Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как объединить два массива

Короткий ответ

Создайте массив нужной длины с первым массивом внутри и докопируйте второй:

void main() {
    int[] a = {1, 2, 3};
    int[] b = {4, 5};
 
    int[] merged = Arrays.copyOf(a, a.length + b.length);
    System.arraycopy(b, 0, merged, a.length, b.length);
 
    IO.println(Arrays.toString(merged));
}

Результат:

[1, 2, 3, 4, 5]

Через поток

IntStream.concat() и Stream.concat() склеивают потоки:

void main() {
    int[] a = {1, 2};
    int[] b = {3, 4};
    String[] x = {"a"};
    String[] y = {"b", "c"};
 
    IO.println(Arrays.toString(IntStream.concat(Arrays.stream(a), Arrays.stream(b)).toArray()));
    IO.println(Arrays.toString(Stream.concat(Arrays.stream(x), Arrays.stream(y)).toArray(String[]::new)));
}

Результат:

[1, 2, 3, 4]
[a, b, c]

Без повторов

Добавьте distinct(), чтобы одинаковые значения попали в результат один раз:

void main() {
    int[] a = {1, 2, 3};
    int[] b = {2, 3, 4};
 
    IO.println(Arrays.toString(IntStream.concat(Arrays.stream(a), Arrays.stream(b)).distinct().toArray()));
}

Результат:

[1, 2, 3, 4]

Частая ошибка

Сложить массивы оператором +. Для массивов он не определён:

void main() {
    int[] a = {1};
    int[] b = {2};
    int[] c = a + b;
}

Результат:

Main.java:4: error: bad operand types for binary operator '+'

Функции из этого ответа

  • Arrays.copyOf() — Копирует массив в новый — той же или другой длины. Часть массива копирует copyOfRange().
  • Stream.of() — Создаёт поток из перечисленных значений.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.