Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Combine multiple lists in Java

Tags:

java

list

If I want to make two lists into one in Java, I can use ListUtils.union(List list1,List list2). But what if I want to combine multiple lists?

This works:

import org.apache.commons.collections.ListUtils;
List<Integer>list1=Arrays.asList(1,2,3);
List<Integer>list2=Arrays.asList(4,5,6);
List<Integer>list3=Arrays.asList(7,8,9);
List<Integer>list4=Arrays.asList(10,0,-1);
System.out.println(ListUtils.union(ListUtils.union(list1, list2),ListUtils.union(list3, list4)));

But it doesn't really look like the best solution, neither is it particularly great to read. Sadly ListUtils.union(list1,list2,list3,list4) doesn't work. Using addAll multiple times and creating its own list just for that with duplicates of all the entries also doesn't seem ideal to me. So what can I do instead?

like image 352
Fabian Röling Avatar asked Jul 24 '17 13:07

Fabian Röling


People also ask

How do I merge two array lists?

Approach: ArrayLists can be joined in Java with the help of Collection. addAll() method. This method is called by the destination ArrayList and the other ArrayList is passed as the parameter to this method. This method appends the second ArrayList to the end of the first ArrayList.

How do you append a List to another List in Java?

Insert All Elements From One List Into Another. It is possible to add all elements from one Java List into another List . You do so using the List addAll() method. The resulting List is the union of the two lists.


3 Answers

Java 8 has an easy way of doing it with the help of Stream API shown in the code below. We have basically created a stream with all the lists , and then as we need the individual contents of the lists, there is a need to flatten it with flatMap and finally collect the elements in a List.

List<Integer>list1=Arrays.asList(1,2,3);
List<Integer>list2=Arrays.asList(4,5,6);
List<Integer>list3=Arrays.asList(7,8,9);
List<Integer>list4=Arrays.asList(10,0,-1);
List<Integer> newList = Stream.of(list1, list2, list3,list4)
                                      .flatMap(Collection::stream)
                                      .collect(Collectors.toList());       
 System.out.println(newList); // prints [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, -1]
like image 50
Pallavi Sonal Avatar answered Oct 07 '22 05:10

Pallavi Sonal


Adding other alternatives:

OPTION 1:

List<Integer> joinedList = joinLists(list1, list2, list3, list4);

public static <T> List<T> joinLists(List<T>... lists) {
        return Arrays.stream(lists).flatMap(Collection::stream).collect(Collectors.toList()); 
}

OPTION 2:

List<Integer> joinedList = new ArrayList<>();
Stream.of(list1, list2, list3, list4).forEach(joinedList::addAll);
like image 20
Sahil Chhabra Avatar answered Oct 07 '22 05:10

Sahil Chhabra


Use an ArrayList to list down all your Lists....

ArrayList<String> arrl = new ArrayList<String>();
List<String> list1 = new ArrayList<String>();
    list.add("one");
    list.add("two");
List<String> list2 = new ArrayList<String>();
    list.add("one1");
    list.add("two2");
    arrl.addAll(list1);
arrl.addAll(list2);
    System.out.println("After Copy: "+arrl);

Thats it your list will be made

like image 1
Khan.N Avatar answered Oct 07 '22 07:10

Khan.N