如何使用java中的流收集List <String>到List <String>?

Mos*_*ani -1 java stream java-stream

我有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);
Run Code Online (Sandbox Code Playgroud)

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

 listData.stream()
         .map(this::getList)
         .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

有什么方法Collectors可以代替addAll吗?

Era*_*ran 8

你需要flatMap:

List<String> resultList =
    listData.stream()
            .flatMap(s -> getList(s).stream())
            .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)