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

Java7下遍历多值键HashMap,查询待办事项今日到期任务

嘿,我来帮你搞定这两个Java 7的集合作业需求!咱们一步步来拆解:

第一步:先把多值HashMap的结构理清楚

Java 7本身没有原生支持「一个键对应多个值」的Map,所以咱们通常会用HashMap<String, List<Task>>这种嵌套结构——这里建议你先封装一个Task类来管理任务的三个属性(任务内容、执行时间、执行日期),这样后续遍历和筛选会方便很多,也符合面向对象的思路:

class Task {
    private String job;
    private String time;
    private String date;

    // 构造方法
    public Task(String job, String time, String date) {
        this.job = job;
        this.time = time;
        this.date = date;
    }

    // 手动写getter方法(Java7没有Lombok,得自己实现)
    public String getJob() {
        return job;
    }

    public String getTime() {
        return time;
    }

    public String getDate() {
        return date;
    }
}

之后你的任务Map就可以定义成HashMap<String, List<Task>> taskMap;——这里的键可以根据你的需求选(比如按日期分组、按类别分组都可以),不影响后续的遍历和筛选逻辑。

第二步:遍历多值HashMap的两种常用方式

针对这种嵌套的Map,Java 7里有两种简单的遍历方式:

方式1:遍历EntrySet(最推荐)

直接拿到Map里的每一组「键-值列表」,然后逐个处理:

for (Map.Entry<String, List<Task>> entry : taskMap.entrySet()) {
    String key = entry.getKey();
    List<Task> tasksUnderKey = entry.getValue();
    
    System.out.println("当前键:" + key);
    // 遍历该键对应的所有任务
    for (Task task : tasksUnderKey) {
        System.out.println("任务:" + task.getJob() + " | 时间:" + task.getTime() + " | 日期:" + task.getDate());
    }
}

方式2:先遍历键,再取值

如果只关心任务内容,也可以先拿到所有键,再逐个获取对应的任务列表:

for (String key : taskMap.keySet()) {
    List<Task> tasks = taskMap.get(key);
    // 这里同样可以遍历tasks列表处理每个任务
}
第三步:筛选今日到期的任务

结合你现有的today实例变量,咱们可以在遍历的时候加入判断逻辑,把符合条件的任务筛选出来:

// 先准备一个集合存今日到期的任务
List<Task> todayDueTasks = new ArrayList<Task>();

// 遍历整个Map的所有任务
for (Map.Entry<String, List<Task>> entry : taskMap.entrySet()) {
    List<Task> tasks = entry.getValue();
    for (Task task : tasks) {
        // 关键:对比任务日期和today是否一致(注意格式要完全相同,比如都是"yyyy-MM-dd")
        if (today.equals(task.getDate())) {
            todayDueTasks.add(task);
        }
    }
}

// 输出筛选结果
System.out.println("今日到期的任务清单:");
for (Task task : todayDueTasks) {
    System.out.println("- " + task.getJob() + ",执行时间:" + task.getTime());
}

小提醒:

  • 一定要保证today和task.getDate()的日期格式完全统一,比如都是"2024-05-20"这种字符串格式,否则equals()会判断不相等。如果你的日期是用Date类型存储的,直接用task.getDate().equals(today)就好,别转字符串避免时区坑。
  • 如果你之前没封装Task类,而是直接把任务信息拼接成字符串存在List里,那筛选时还要拆分字符串,会很麻烦,所以封装Task类是更优的选择哦。

内容的提问来源于stack exchange,提问作者Paul Harper

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:22:00