Combine multiple lists in Java

JavaList

Java Problem Overview


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?

Java Solutions


Solution 1 - Java

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]

Solution 2 - Java

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);

Solution 3 - Java

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

Solution 4 - Java

You can write your own methods to merge two or more lists. Example:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Test{ 
    public static void main(String[] args) {
        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(combineMyLists(list1,list2,list3,list4));
        System.out.println("----------------------");
        System.out.println(combineMyLists2(list1,list2,list3,list4));
    } 
    private static List<Integer> combineMyLists(List<Integer>... args) {
        List<Integer> combinedList = new ArrayList<>();
        for(List<Integer> list : args){
            for(Integer i: list){
               combinedList.add(i);
            }
        }
        return combinedList;
    }
    private static List<Integer> combineMyLists2(List<Integer>... args) {
        List<Integer> combinedList = Stream.of(args).flatMap(i -> i.stream()).collect(Collectors.toList());   ;
        return combinedList;
    }
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionFabian R&#246;lingView Question on Stackoverflow
Solution 1 - JavaPallavi SonalView Answer on Stackoverflow
Solution 2 - JavaSahil ChhabraView Answer on Stackoverflow
Solution 3 - JavaKhan.NView Answer on Stackoverflow
Solution 4 - JavaEritreanView Answer on Stackoverflow