Как объединить две коллекции java
Для объединения двух коллекций в Java можно использовать метод addAll класса Collections . Этот метод добавляет все элементы одной коллекции в другую коллекцию.
Например, для объединения двух списков numbers1 и numbers2 можно написать следующий код:
ListInteger> numbers1 = Arrays.asList(1, 2, 3); ListInteger> numbers2 = Arrays.asList(4, 5, 6); ListInteger> moreNumbers = new ArrayList<>(); combinedList.addAll(numbers1); combinedList.addAll(numbers2); System.out.println(moreNumbers); // => [1, 2, 3, 4, 5, 6]
Объединение списков в Java
Метод addAll(Collection c) класса java.util.ArrayList добавляет все элементы в указанной коллекции в конец этого списка в том порядке, в котором они возвращаются итератором указанной коллекции. Используя этот метод, вы можете объединить списки в Java.
Пример
import java.util.ArrayList; public class Sample < public static void main(String[] args) < ArrayListlist = new ArrayList(); list.add("JavaFx"); list.add("Java"); list.add("WebGL"); list.add("OpenCV"); System.out.println(list); ArrayList newList = new ArrayList(); list.add("HBase"); list.add("Neo4j"); list.add("MangoDB"); list.add("Cassandra"); list.addAll(newList); System.out.println(list); > >
Итог
[JavaFx, Java, WebGL, OpenCV] [JavaFx, Java, WebGL, OpenCV, HBase, Neo4j, MangoDB, Cassandra]
Средняя оценка 2.3 / 5. Количество голосов: 3
Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.
Или поделись статьей
Видим, что вы не нашли ответ на свой вопрос.
Помогите улучшить статью.
Напишите комментарий, что можно добавить к статье, какой информации не хватает.
Как объединить 2 списка стримом так, чтобы итоговый результат включал в себя одни параметры из первого списка, а другие из второго списка?
Есть 2 списка List.
Первый содержит в себе список элементов с максимальным значением, второй с минимальным (значения парные. не может быть такого, что в одном списке есть элемент, а в другом такого же, но с другими параметрами нет).
Нужно схлопнуть эти списки в один собрав итоговые значения так, чтоб в одном элементе списка отражалась информация из двух склеенных.
Проще говоря, прогнать через стрим эти два списка, Identity задать по ID и в наборе параметров поле High заполнить из первого списка, поле Low из второго.
Подкините идей как такой стрим написать?
P.S. Список из своего типа данных, в котором есть поля ID, High, Low, и т.д. и т.п.
- Вопрос задан 06 февр. 2023
- 383 просмотра
Комментировать
Решения вопроса 1
Dmitry Roo @xez Куратор тега Java
TL Junior Roo
var collectionOfElements = Stream.concat(highs.stream(), lows.stream()) .collect(Collectors.toMap(MyObject::id, Function.identity(), (o1, o2) -> < return . // TODO :: merge two objects; >)).values();
Объединяете два стрима и превращаете в мапу. Там три аргумента возможны: функция для key, для value, и то, что вам нужно, функция объединяющая элементы при совпадении ключей.
Останется у этой мапы отбросить ключи — останется коллекция объединенных значений.
Ответ написан 06 февр. 2023
Нравится 2 3 комментария
infirmitive @infirmitive Автор вопроса
Класс, получилось как и хотел, но можно ли как-то оптимальнее сделать слияние двух элементов без объявления каждого поля из o1 или o2? т.е. в секции объединения достаточно взять первый объект и поменять у него лишь поле low взяв его из o2. В дебаггере потестил просто создавая с нуля объект и задавая ему эти поля.
infirmitive @infirmitive Автор вопроса
а, я понял, взять o1 и заменить ему одно поле и вернуть его, чет тупанул)
Dmitry Roo @xez Куратор тега Java
infirmitive, по науке будет лучше создать новый объект, но вы там смотрите по обстоятельствам уже.
Ответы на вопрос 1
Зобанели на Хабре, волки́ ;((
import lombok.Getter; import lombok.Setter; import java.util.ArrayList; import java.util.List; public class test < public static void main(String[] args) < ListlistA = new ArrayList<>(); List listB = new ArrayList<>(); List coupled = couple(listA, listB); > static List couple(List listA, List listB) < return listA.stream() .peek(itemA -> < Item complimentary = listB.stream().filter(itemB ->itemB.getId() == itemA.getId()).findFirst().orElse(null); if (complimentary == null) throw new IllegalArgumentException("Can't find pair"); itemA.setLow(complimentary.getLow()); >) .toList(); > > @Getter @Setter class Item
НО! Если элементов много то быстродействие будет ни к чёрту 🙂
Ответ написан 08 февр. 2023
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Java
- +1 ещё
Как интегрировать Java в 1C?
- 2 подписчика
- 15 часов назад
- 200 просмотров
Как объединить два списка в Java
В этой статье мы покажем вам 2 примера для объединения двух списков в Java.
- JDK — List.addAll ()
- Apache Common — ListUtils.union ()
1. Пример List.addAll ()
Просто объедините два списка с List.addAll() ,
package com.csharpcoderr.example; import java.util.ArrayList; import java.util.List; public class JoinListsExample < public static void main(String[] args) < ListlistA = new ArrayList(); listA.add("A"); List listB = new ArrayList(); listB.add("B"); List listFinal = new ArrayList(); listFinal.addAll(listA); listFinal.addAll(listB); // тот же результат // List listFinal = new ArrayList (listA); //listFinal.addAll(listB); System.out.println("listA : " + listA); System.out.println("listB : " + listB); System.out.println("listFinal : " + listFinal); > >
listA : [A] listB : [B] listFinal : [A, B]
Добавить списки
Чтобы добавить ListB в конец ListA, используйте
listA.addAll(listB);
2. Пример ListUtils.union
Общая библиотека Apache — ListUtils.union() ,
package com.csharpcoderr.example; import java.util.ArrayList; import java.util.List; import org.apache.commons.collections.ListUtils; public class JoinListsExample2 < public static void main(String[] args) < ListlistA = new ArrayList(); listA.add("A"); List listB = new ArrayList(); listB.add("B"); List listFinal = ListUtils.union(listA, listB); System.out.println("listA : " + listA); System.out.println("listB : " + listB); System.out.println("listFinal : " + listFinal); > >
listA : [A] listB : [B] listFinal : [A, B]
Копаться в исходном коде, ListUtils.union использует то же самое List.addAll() объединить списки.
public static List union(final List list1, final List list2)
Рекомендации
- Как считать дублирующиеся элементы в списке Java
- Apache общий ListUtils JavaDoc
- List.addAll () JavaDoc