Combine multiple lists in Java

后端 未结 4 1067
故里飘歌
故里飘歌 2020-12-28 12:54

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

相关标签:
4条回答
  • 2020-12-28 13:35

    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]
    
    0 讨论(0)
  • 2020-12-28 13:38

    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);
    
    0 讨论(0)
  • 2020-12-28 13:51

    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

    0 讨论(0)
  • 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;
        }
    }
    
    0 讨论(0)
提交回复
热议问题