此处是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
(例如7/4/2019)的specialDate
进行映射的getBuzzFromFizz()
。但是,由于每个Buzz
都将返回一个带有新Date
实例的Dates
,因此Buzz
都不会是同一实例,因此我不相信上述内容会起作用。
我需要一种表达方式:“ 此地图是否已经包含与当前{{1}}的新String日期相同的String日期?”。有什么想法可以实现这一目标吗?
答案 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);
}
}
}