Java如何将嵌套List(List of Lists)转换为单个单层List?
Java嵌套列表转单层列表的简洁实现
Java 8及更高版本内置的Stream API完全支持该需求,核心使用flatMap算子完成列表扁平化,你示例代码中的空缺部分可以直接替换为对应实现。
核心实现代码
你原方法的return部分直接用以下代码即可:
// Java 16及以上版本写法 return list.stream() .flatMap(List::stream) .toList();
如果你的项目使用Java 8~15版本,替换为如下写法:
import java.util.stream.Collectors; // Java 8-15版本兼容写法 return list.stream() .flatMap(List::stream) .collect(Collectors.toList());
说明
flatMap算子会把流中的每一个子列表展开为子列表元素的流,自动完成多层列表到单层列表的转换- 转换后元素的顺序和你排序后的子列表顺序完全一致:即排序靠前的短子列表的元素全部排在前面,后续再拼接更长的子列表元素,完全匹配你的业务逻辑
- 注意:Java 16+ 中
Stream.toList()返回的是不可变列表,如果后续需要对返回结果做增删修改,建议统一使用Collectors.toList()获取可变列表
完整修改后的方法示例
import java.time.LocalDateTime; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public List<LocalDateTime> getallsort(){ List<LocalDateTime> elite = getElite(true); List<LocalDateTime> recreation = getRecreation(true); List<LocalDateTime> youth = getYouth(true); List<List<LocalDateTime>> list = Arrays.asList(elite,recreation,youth); list.sort((xs1, xs2) -> xs1.size() - xs2.size()); // 按需选择对应版本的实现 return list.stream().flatMap(List::stream).collect(Collectors.toList()); }
内容的提问来源于stack exchange,提问作者Greg W.F.R
相关产品推荐
相关产品推荐

