我有一个如下的ArrayList。
ArrayList<ArrayList<String>> a = new ArrayList<ArrayList<String>>();
其中ArrayList 'a'
包含两个字符串ArrayList,如下所示。
[a,b,c,d] & [1,2,3,4]
如何将这两个列表合并为一个列表,如下所示。
[a,b,c,d,1,2,3,4]
提前致谢。
答案 0 :(得分:7)
您合并了foreach
循环和addAll
方法。
实施例
ArrayList<String> combined = new ArrayList<String>();
for(ArrayList<String> list : a) {
combined.addAll(list);
}
这是如何运作的?
for each
循环将遍历Collection
的每个成员。它有一个临时变量,在这种情况下list
,它也分配当前元素。您所做的只是将list
的每个值中的每个元素添加到名为ArrayList
的一个combined
。
答案 1 :(得分:4)
这应该有效
ArrayList<ArrayList<String>> a = new ArrayList<ArrayList<String>>();
List<String> result = new ArrayList<String>();
for (ArrayList<String> arrayList : a) {
result.addAll(arrayList);
}
查看主循环并获取其中的每个列表并添加到结果列表中。
答案 2 :(得分:4)
我们还有其他一些方法,如果你可以使用Apache commons-collection
ListUtils.union(java.util.List list1, java.util.List list2)
返回一个新列表,其中包含附加到第一个列表的第二个列表。
答案 3 :(得分:2)
使用a
循环和foreach
至addAll
arraylist
result
的所有内部列表
ArrayList<String> merged = new ArrayList<String>();
for(ArrayList<String> list : a){
merged.addAll(list);
}
答案 4 :(得分:2)
使用ArrayList.addAll()。像这样的东西应该工作(假设列表包含String对象;你应该相应地改变)。
List<String> combined = new ArrayList<String>();
combined.addAll(firstArrayList);
答案 5 :(得分:1)
如果您需要Iterable,可以使用Guava:
Iterables.concat(Iterable<? extends Iterable<? extends T>> inputs)
如果你真的需要一个List,你可以使用这个将结果Iterable转换为List:
Lists.newArrayList(Iterable<? extends E> elements)
或
Lists.newLinkedList(Iterable<? extends E> elements)
答案 6 :(得分:0)
使用FluentIterable.transformAndConcat。
将函数应用于此流畅迭代的每个元素,并返回具有连接结果组合的流畅迭代。函数返回一个Iterable结果。
List<String> combined = FluentIterable.from(a)
.transformAndConcat(new Function<List<String>, List<String>>() {
@Override
public List<String> apply(List<String> elem) {
return Arrays.asList(elem.toArray(new String[elem.size()]));
}
}).toList();
System.out.println(combined.toString());
[a, b, c, d, 1, 2, 3, 4]
'com.google.guava:guava:15.0'
答案 7 :(得分:0)
Java 8流提供了另一个解决方案:
List<List<String>> list = Arrays.asList(
Arrays.asList("1", "2"),
Arrays.asList("3", "4"),
Arrays.asList("5", "6")
);
List<String> merged = list
.stream()
.reduce(new ArrayList<>(),(accumulator, sublist) -> {accumulator.addAll(sublist);return accumulator;});
System.out.println(merged);
这与已接受的答案类似:您遍历列表(使用Stream.reduce
)将所有子列表元素添加到merged
列表中。
答案 8 :(得分:0)
List<Integer> one = Arrays.asList(1, 2,3);
List<Integer> two = Arrays.asList(4, 5,6);
List<Integer> out = Stream.of(one, two)
.collect(ArrayList::new, (listStream, item) -> listStream.addAll(item), (item1, item2) -> {});
System.out.println(out);