将 3 个数组列表合并为一个
Posted
技术标签:
【中文标题】将 3 个数组列表合并为一个【英文标题】:Merge 3 arraylist to one 【发布时间】:2012-01-27 08:32:48 【问题描述】:我想在java中将3个arraylist合并为一个。有谁知道做这种事情的最佳方法是什么?
【问题讨论】:
我很困惑。该问题没有说明 2D 列表,但接受的答案和 cmets 讨论 2D,而另一个答案专门针对 2D 列表。那么,这是要获取一些List<T>
并使用原件的所有元素制作一个 List<T>
,还是要制作一个包含每个原件的 List<List<T>>
?
输出是ArrayList<something>
的实例而不仅仅是List
重要吗?
【参考方案1】:
使用ArrayList.addAll()
。这样的事情应该可以工作(假设列表包含String
对象;您应该相应地进行更改)。
List<String> combined = new ArrayList<String>();
combined.addAll(firstArrayList);
combined.addAll(secondArrayList);
combined.addAll(thirdArrayList);
更新
我可以通过您的 cmets 看到您实际上可能正在尝试创建 2D 列表。如果是这样,如下代码应该可以工作:
List<List<String>> combined2d = new ArrayList<List<String>>();
combined2d.add(firstArrayList);
combined2d.add(secondArrayList);
combined2d.add(thirdArrayList);
【讨论】:
Xm 我认为这个解决方案是关于创建一个 2d Arraylist。我想将 3 个列表并排放置到一个新列表中。 @snake plissken:你在问题中没有提到二维列表。但是,我已经更新了我的答案以包含 2D 解决方案。 @snakeplissken - 这个答案会如你所愿,不涉及 2D。【参考方案2】:使用 java.util.Arrays.asList 来简化合并怎么样?
List<String> one = Arrays.asList("one","two","three");
List<String> two = Arrays.asList("four","five","six");
List<String> three = Arrays.asList("seven","eight","nine");
List<List<String>> merged = Arrays.asList(one, two, three);
【讨论】:
这比第一个答案好多了。这是一种将列表合并为二维列表的更简洁的方法。 注意:您通常将其称为Arrays.asList()
请注意,这会产生固定大小的List<List<String>>
,而不是ArrayList<ArrayList<String>>
。 OP 特别要求ArrayList
。我不确定他们想要 1D 还是 2D,但肯定是 ArrayList
。【参考方案3】:
使用 Java 8 流:
列表列表
List<List<String>> listOfList = Stream.of(list1, list2, list3).collect(Collectors.toList());
字符串列表
List<String> list = Stream.of(list1, list2, list3).flatMap(Collection::stream).collect(Collectors.toList());
使用 Java 9 List.of 静态工厂方法(警告:此列表是不可变的并且不允许为空)
List<List<String>> = List.of(list1, list2, list3);
其中list1, list2, list3
的类型为List<String>
【讨论】:
以上是关于将 3 个数组列表合并为一个的主要内容,如果未能解决你的问题,请参考以下文章