You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:14:44