使用Lambdas将列表列表变成列表
如果我有一个List<List<Object>>
,我可以把它变成一个List<Object>
,它包含所有使用连续(不中断调用序列)调用lambda的对象?
您可以使用flatMap
将内部列表(在将其转换为Stream之后)平铺到单个Stream中,然后将结果收集到列表中:
List<List<Object>> list = ... List<Object> flat = list.stream() .flatMap(List::stream) .collect(Collectors.toList());
flatmap
更好,但还有其他方法可以实现
List<List<Object>> listOfList = ... // fill List<Object> collect = listOfList.stream().collect(ArrayList::new, List::addAll, List::addAll);
您可以使用Eclipse集合中的flatCollect()
模式。
MutableList<List<Object>> list = Lists.mutable.empty(); MutableList<Object> flat = list.flatCollect(each -> each);
如果您无法更改列表中的List
:
List<List<Object>> list = new ArrayList<>(); List<Object> flat = ListAdapter.adapt(list).flatCollect(each -> each);
注意:我是Eclipse Collections的贡献者。