如何收集清单 列表 在java中使用流?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何收集清单 列表 在java中使用流?相关的知识,希望对你有一定的参考价值。

我有listData (List<String>)getList方法接受String作为参数(例如"java")并返回List<String>(例如["j","a","v","a"])。我需要将这些列表收集到一个列表中。我试过addAll,它工作正常:

List<String> listData = Arrays.asList("java","Stream","laMbdA");
List<String> resultList = new ArrayList<>();

listData.stream()
        .map(this::getList)  // acccepts String as an argument and returns List<String>
        .forEach(resultList::addAll);

如果我尝试Collectors.toList(),我会得到一个List<List<String>>

 listData.stream()
         .map(this::getList)
         .collect(Collectors.toList());

Collectors有什么方法我可以用而不是addAll吗?

答案

你需要flatMap

List<String> resultList =
    listData.stream()
            .flatMap(s -> getList(s).stream())
            .collect(Collectors.toList());
另一答案

仅使用方法引用扩展Eran的答案。因为你在你的帖子中使用方法引用,你也可以做同样的事情,只需在flatMap操作之上链接map

   List<String> resultSet =
                 listData.stream()
                         .map(this::getList)
                         .flatMap(List::stream)
                         .collect(Collectors.toList());
另一答案

我想下面会帮助你。给出一些解释,“map”返回List,它将成为“resultList”的一个元素。所以你只需要使用toList收集器收集由“map”函数返回的列表。希望对你有所帮助。

public class ListStreamQ {
public static void main(String[] args) {
    List<String> listData = Arrays.asList("java", "Stream", "laMbdA");
    List<Collection<String>> resultList = new ArrayList<>();
    resultList = listData.stream()
            .map(ListStreamQ::getList)
            .collect(Collectors.toList());
    System.out.println(resultList);
}

static List<String> getList(String word){
    return Arrays.asList(word.split(""));
}

}

以上是关于如何收集清单 列表 在java中使用流?的主要内容,如果未能解决你的问题,请参考以下文章

Java流:收集嵌套集合

如何在片段中使用 GetJsonFromUrlTask​​.java

如何将 java 映射展平为列表,以便列表交替键和值?

如何解析 MPD 清单视频文件并获取图像适配集的片段?

从多个状态流中收集

如何使列表视图出现在片段中?