使用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的贡献者。