用于日期的Java hashmap搜索键

时间:2011-08-19 10:08:55

标签: java search key hashmap

我有一个hashmap: 映射dateEvent = new HashMap();其中key是日期和时间,value是字符串。 我用数据填充集合,其中日期格式为dd.MM.yyyy HH:mm。 如何根据以下格式获取所有日期键:dd.MM.yyyy?

4 个答案:

答案 0 :(得分:10)

这段代码可以解决问题:

public static void findEvents(Map<Date, Event> dateEvents, Date targetDate) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
    String target = dateFormat.format(targetDate); 
    for (Map.Entry<Date, Event> entry : dateEvents.entrySet()) {
        if (dateFormat.format(entry.getKey()).equals(target)) {
            System.out.println("Event " + entry.getValue() + " is on the specified date");
        }
    }
}

重要的是,在比较之前,所有日期都会转换为格式为“dd.MM.yyyy”的字符串,因此如果日期相同,则小时/分钟/秒的任何差异仍然匹配。

此代码还演示了迭代地图的最佳方式(恕我直言)。

答案 1 :(得分:0)

不确定我是否帮助你。但是,您可以使用map.keySet()从地图中获取一组键。如果要查找所有不同的日期,请将所有日期填入集合中。如果要将精度降低到几天,一种解决方案是将日期转换为所需格式并将这些字符串添加到集合中。重复项将自动删除。

例如:

Map<Date, String> yourMap = [..];

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd.MM.yyyy");

Set<String> differentDates = new HashSet<String>();
for (Date date: yourMap.keySet()) {
    differentDates.add(simpleDateFormat.format(date));
}

答案 2 :(得分:0)

你有(至少)两个选择:

您可以编写自己的Date类,它提供hashCode()equals()的适当实现。 (如果这样做,则不建议您将该类基于已定义这些方法的另一个类(例如java.util.Date)。)

强力替代方法是扫描所有按键是否符合您的标准。

答案 3 :(得分:0)

日期01.01.2011 (dd.MM.yyyy)与日期01.01.2011 00:00之间没有区别( dd.MM.yyyy HH:mm )

Date持有long,其中包含小时和分钟。即使是public Date(int year, int month, int date)