Java - 使用Stream对List<List<LocalTime>>进行排序
用Java Stream对List<List>排序
你想要按照每个子列表里的第一个LocalTime元素对整个大列表做升序排序对吧?用Java的Stream API可以轻松实现这个需求,核心就是通过自定义比较器,让排序逻辑基于子列表的首个时间元素来执行。
完整代码示例
import java.time.LocalTime; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; public class TimeListSorter { public static void main(String[] args) { // 初始化原始列表 List<List<LocalTime>> originalList = List.of( List.of(LocalTime.of(21, 29), LocalTime.of(22, 29)), List.of(LocalTime.of(16, 29), LocalTime.of(17, 29)) ); // 用Stream完成排序 List<List<LocalTime>> sortedList = originalList.stream() // 按照子列表的第一个LocalTime自然升序排序 .sorted(Comparator.comparing(subList -> subList.get(0))) // 将流收集为List .collect(Collectors.toList()); // 验证结果 sortedList.forEach(System.out::println); // 输出结果: [16:29, 17:29], [21:29, 22:29] } }
关键细节说明
sorted(Comparator.comparing(subList -> subList.get(0))):这里的比较器会自动提取每个子列表的第一个元素,而LocalTime本身已经实现了Comparable接口,所以会直接按照时间的自然顺序(早的时间在前)完成比较。- 如果你的子列表存在为空的可能性,建议加个空值检查避免抛出
NullPointerException,比如:
这样空的子列表会被排到最后,你也可以根据实际需求调整这个兜底逻辑。.sorted(Comparator.comparing(subList -> subList.isEmpty() ? LocalTime.MAX : subList.get(0)))
内容的提问来源于stack exchange,提问作者Marie
相关产品推荐
相关产品推荐

