Добавление Java-дат в качестве ключей на карты - PullRequest
0 голосов
/ 04 июля 2019

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);

  }

}

Таким образом, мое намерение предназначено для всех Fizzes, у которых есть Buzz с одним и тем же specialDate (например, 7/4/2019) для сопоставления. Однако, поскольку каждый getBuzzFromFizz() будет возвращать Buzz с новым экземпляром Date, ни один из Dates не будет таким же экземпляром, и поэтому я не верю, что вышеприведенное сработает.

Мне нужен способ сказать: « Содержит ли эта карта ту же строковую дату, что и новая строковая дата этого текущего Buzz? ». Есть идеи, как мне это сделать?

Ответы [ 2 ]

1 голос
/ 04 июля 2019

Измените ключ с buzz.getSpecialDate() на форматированную строковую дату без времени. И вы легко сможете группировать шипения.

например. Ключ может быть в формате ГГГГ-ММ-дд Дата

Вы можете использовать DateFormat для того же.

0 голосов
/ 04 июля 2019

Вы можете форматировать даты в один и тот же формат даты (например, «дд / мм / гггг»), а затем сравнивать их как строковые значения:

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);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...