在 Java 中合并多个列表

2022-08-31 17:25:33

如果我想在Java中将两个列表合二为一,我可以使用.但是,如果我想合并多个列表,该怎么办?ListUtils.union(List list1,List list2)

这有效:

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

但它看起来并不是最好的解决方案,阅读起来也不是特别好。可悲的是不起作用。使用多次并创建自己的列表只是为了所有条目的重复项,对我来说似乎也不理想。那么我该怎么办呢?ListUtils.union(list1,list2,list3,list4)addAll


答案 1

Java 8有一个简单的方法,可以在下面的代码中所示的Stream API的帮助下做到这一点。我们基本上已经创建了一个 包含所有列表的流 ,然后由于我们需要列表的各个内容,因此需要将其平展并最终收集到.flatMapList

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]

答案 2

添加其他备选项:

选项 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()); 
}

选项 2:

List<Integer> joinedList = new ArrayList<>();
Stream.of(list1, list2, list3, list4).forEach(joinedList::addAll);