Concatenating multiple lists in Java
If I want to do two lists in one in Java I can use ListUtils.union(List list1,List list2)
. But what if I want to combine multiple lists?
It 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 seem like the best solution, and isn't particularly enjoyable to read. Unfortunately, it ListUtils.union(list1,list2,list3,list4)
doesn't work. Using addAll
multiple times and creating a custom list just for it with duplicates of all records also doesn't seem ideal to me. So what can I do instead?
source to share
Java 8 has an easy way to do this using the Stream API shown in the code below. We created basically a stream with all the lists, and then when we need the individual content of the lists, we need to flatten it with flatMap
and finally collect the items into 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]
source to share
Use ArrayList to display a list of 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);
This will be your list.
source to share
You can write your own methods to combine 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;
}
}
source to share