在 Java 中组合多个列表

新手上路,请多包涵

如果我想在 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 并为此使用所有条目的副本创建自己的列表对我来说似乎也不理想。那我能做什么呢?

原文由 Fabian Röling 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 990
2 个回答

Java 8 在 Stream API 的帮助下提供了一种简单的方法,如下面的代码所示。我们基本上已经创建了一个包含所有列表的流,然后由于我们需要列表的各个内容,因此需要使用 flatMap 将其展平,最后将元素收集到 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]

原文由 Pallavi Sonal 发布,翻译遵循 CC BY-SA 3.0 许可协议

添加其他替代方案:

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

原文由 Sahil Chhabra 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题