将Java日期添加为地图上的键

时间:2019-07-04 10:54:31

标签: java collections

此处是Java 8,尽管我正在处理java.util.Date,但不是 LocalDate

在这种情况下,我需要创建一个Map<?,?>密钥为Dates的密钥:

Map<Date, List<Fizz>> fizzesBySpecialDate = new HashMap<>;
List<Fizz> fizzes = getFizzesSomehow();

for (Fizz fizz : fizzes) {

  Buzz buzz = getBuzzFromFizz(fizz);

  if (fizzesBySpecialDate.containsKey(buzz.getSpecialDate())) {

    fizzesBySpecialDate.get(buzz.getSpecialDate()).add(fizz);

  } else {

    final List<Fizz> newGroup = new ArrayList<>();
    newGroup.add(fizz);

    fizzesBySpecialDate.put(buzz.getSpecialDate(), newGroup);

  }

}

因此,我的意图是针对所有拥有FizzesBuzz(例如7/4/2019)的specialDate进行映射的getBuzzFromFizz()。但是,由于每个Buzz都将返回一个带有新Date实例的Dates,因此Buzz都不会是同一实例,因此我不相信上述内容会起作用。

我需要一种表达方式:“ 此地图是否已经包含与当前{{1}}的新String日期相同的String日期?”。有什么想法可以实现这一目标吗?

2 个答案:

答案 0 :(得分:1)

将密钥从buzz.getSpecialDate()更改为格式化的字符串日期,而无需时间。这样您就可以轻松地将嘶嘶声分组。

例如密钥可以是YYYY-MM-dd格式的日期

您可以使用DateFormat

答案 1 :(得分:0)

您都可以将日期格式设置为相同的日期格式(例如“ dd / MM / yyyy”),然后将它们作为字符串值进行比较:

Map<Date, List<Fizz>> fizzesBySpecialDate = new HashMap<>();
List<Fizz> fizzes = getFizzesSomehow();

for (Fizz fizz : fizzes) {

    Buzz buzz = getBuzzFromFizz(fizz);

    DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
    String date = format.format(buzz.getSpecialDate());

    for (Map.Entry<Date, List<Fizz>> entry : fizzesBySpecialDate.entrySet()) {
        if (format.format(entry.getKey()).equals(date)) {
            fizzesBySpecialDate.get(buzz.getSpecialDate()).add(fizz);
        } else {

            final List<Fizz> newGroup = new ArrayList<>();
            newGroup.add(fizz);

            fizzesBySpecialDate.put(buzz.getSpecialDate(), newGroup);
        }
    }
}