将List列表转换为java中的列表

时间:2015-04-14 18:50:50

标签: java arraylist

List<List<String>> superlist = new ArrayList<List<String>>();

List<String> list1 = new ArrayList<String>();
list1.add("a1");
list1.add("a2");

List<String> list2 = new ArrayList<String>();
list2.add("b1");
list2.add("b2");

List<String> list3= new ArrayList<String>();
list3.add("c1");
list3.add("c2");

superlist.add(list1);
superlist.add(list2);
superlist.add(list3);

List<String> result= new ArrayList<>();

现在我想创建一个包含superList中所有值的新列表。 此结果应包含a1,a2,b1,b2,c1,c2

5 个答案:

答案 0 :(得分:22)

使用flatMap

尝试这样做
List<List<Object>> list = 
List<Object> lst = list.stream()
        .flatMap(x -> x.stream())
        .collect(Collectors.toList());

答案 1 :(得分:6)

如果您使用Java&lt; 8(并且不能使用Stream s),你可以使用Guava&#39; s Iterables.concat进行单行编写:

List<String> merged = Lists.newArrayList(Iterables.concat(superList));

答案 2 :(得分:2)

您必须遍历List对象中的每个superlist才能获取所有内容。您可以使用addAll()方法将每个列表的内容复制到新的List

List<String> result = new ArrayList<String>();
for (List<String> list : superlist) {
    result.addAll(list);
}

答案 3 :(得分:2)

superlist.forEach(e -> result.addAll(e));

经过一番研究,我发现了这种方式。

答案 4 :(得分:0)

这对我有用!

List<String> result= new ArrayList<>();
    
    superlist.stream().forEach(
            
            n->result.addAll(n)
            );
    
    System.out.println(result);