Java8按天分组CustomDate,如何将分组值转为LocalTime列表?
解决按日期分组并提取时间集合的问题
嗨,这个问题很常见,你只需要给groupingBy加一个映射收集器,就能把分组后的CustomDate列表转换成对应的LocalTime集合啦!
修改后的完整代码:
import java.util.List; import java.util.Map; import java.time.LocalDate; import java.time.LocalTime; import java.time.LocalDateTime; import java.util.stream.Collectors; // 你的CustomDate类 public class CustomDate { LocalDateTime datetime; } // 核心分组逻辑 Map<LocalDate, List<LocalTime>> dateToTimesMap = list.stream() .collect(Collectors.groupingBy( // 分组键:从CustomDate中提取LocalDate作为分组依据 customDate -> customDate.datetime.toLocalDate(), // 分组值:将每个CustomDate转换为LocalTime,再收集成列表 Collectors.mapping(customDate -> customDate.datetime.toLocalTime(), Collectors.toList()) ));
代码逻辑拆解:
- 第一步依旧用
Collectors.groupingBy()按日期分组,这部分和你原来的代码逻辑一致; - 第二个参数
Collectors.mapping()是关键:它会遍历每个分组里的CustomDate对象,通过customDate.datetime.toLocalTime()提取出时间部分,再用Collectors.toList()把这些时间收集成列表。
额外小技巧:
如果你的数据里存在重复的时间,想要自动去重的话,只需要把Collectors.toList()换成Collectors.toSet(),这样分组后的结果就会变成Map<LocalDate, Set<LocalTime>>,自动过滤掉重复的时间~
内容的提问来源于stack exchange,提问作者d-man
相关产品推荐
相关产品推荐

