Encodera

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

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

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

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

Создайте новый список из первого и добавьте второй через addAll():

void main() {
    var a = List.of(1, 2, 3);
    var b = List.of(4, 5);
 
    var merged = new ArrayList<>(a);
    merged.addAll(b);
    IO.println(merged);
}

Результат:

[1, 2, 3, 4, 5]

Через поток

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

void main() {
    var a = List.of("x", "y");
    var b = List.of("z");
 
    IO.println(Stream.concat(a.stream(), b.stream()).toList());
}

Результат:

[x, y, z]

Много списков

Для нескольких списков используйте flatMap():

void main() {
    var parts = List.of(List.of(1, 2), List.of(3), List.of(4, 5));
    IO.println(parts.stream().flatMap(List::stream).toList());
}

Результат:

[1, 2, 3, 4, 5]

Без повторов

LinkedHashSet уберёт повторы и сохранит порядок:

void main() {
    var a = List.of("java", "sql");
    var b = List.of("sql", "git");
 
    var union = new LinkedHashSet<>(a);
    union.addAll(b);
    IO.println(union);
}

Результат:

[java, sql, git]

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

Вызвать addAll() у списка из List.of(). Он неизменяемый:

void main() {
    var a = List.of(1, 2);
    a.addAll(List.of(3));
}

Результат:

Exception in thread "main" java.lang.UnsupportedOperationException

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

  • List.addAll() — Добавляет в список все элементы другой коллекции.
  • Stream.of() — Создаёт поток из перечисленных значений.
  • LinkedHashSet — Множество, которое помнит порядок добавления элементов.

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

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