我们有一个Map<String,MyObject>
,需要将其转换为Map<Date, MyObject>
。这里的字符串不过是日期存储为字符串,即
{"1999-11-07T18:30:00.000+0000":{"property1":"value1","property2":valuep1},
{"1998-11-07T18:30:00.000+0000":{"property1":"value2","property2":valuep2}
是否有使用lambda和stream的简便方法?我们正在使用java8和Jackson API。
yourMap.entrySet().stream()
.collect(Collectors.toMap(
this::parseDate,
Map.Entry::getValue
));
创建一个将字符串解析为日期的方法;
private Date parseDate(Map.Entry<String, Object> e) {
try {
return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").parse(e.getKey());
} catch (ParseException ex) {
ex.printStackTrace();
}
return some date;
}
由于正在使用java8,因此可以考虑使用LocalDate
代替java.util.Date
。获取现有地图的条目集,并使用LocalDate
收集器以toMap
作为键,并以MyObject作为值创建一个新地图。这是它的外观。
Map<LocalDate, MyObject> myObjByDate = map.entrySet().stream()
.collect(Collectors.toMap(e -> LocalDate.parse(e.getKey().split("T")[0]), Map.Entry::getValue));