将3个ArrayList合并成一个

31

我想在Java中将3个ArrayList合并为一个。 有人知道如何做这件事的最佳方式吗?


1
我有些困惑。问题中没有提到2D列表,但是被接受的答案和评论都在讨论2D列表,而另一个答案则专门针对2D列表。那么,这个问题是关于将一些List<T>取出并制作成一个包含所有原始元素的单个List<T>,还是关于制作一个包含每个原始列表的List<List<T>> - Erick G. Hagstrom
输出是 ArrayList<something> 的实例而不是仅仅是 List 是否很重要? - Erick G. Hagstrom
3个回答

55

使用 ArrayList.addAll() 方法。以下代码应该可以工作(假设列表包含 String 对象;您应相应更改)。

List<String> combined = new ArrayList<String>();
combined.addAll(firstArrayList);
combined.addAll(secondArrayList);
combined.addAll(thirdArrayList);

更新

通过你的评论,我可以看出你实际上正在尝试创建一个二维列表。如果是这样的话,以下代码应该可以工作:

List<List<String>> combined2d = new ArrayList<List<String>>();
combined2d.add(firstArrayList);
combined2d.add(secondArrayList);
combined2d.add(thirdArrayList);

1
我认为这个解决方案是关于创建一个二维ArrayList的。我想把三个列表并排放在一个新列表中。 - snake plissken
2
@snake plissken:你在问题中没有提到二维列表。不过,我已经更新了我的答案,加入了一个二维解决方案。 - Asaph
2
@snakeplissken - 这个答案将会按照你的期望执行,没有涉及到2D。 - ziesemer

10

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

这比第一个答案好多了。这是将列表合并为2D列表的更清晰的方式。 - Michael Massey
注意:通常您会将其称为 Arrays.asList() - Tim
请注意,这会生成一个固定大小的 List<List<String>>,而不是 ArrayList<ArrayList<String>>。OP明确要求使用ArrayList。我不确定他们想要1D还是2D,但肯定应该使用ArrayList - Erick G. Hagstrom

4

使用Java 8 Streams:

列表中的列表

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>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接