如何收集清单 列表 在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中使用流?的主要内容,如果未能解决你的问题,请参考以下文章