[英]Java 8 - Hashmap cannot find and return a ZonedDateTime value
我正在开发一个示例项目,我们需要在Hashmap中存储一些值并通过REST服务获取它们。
将数据发布为
{"timestamp":"2015-09-01T16:40:00.000Z", "temperature":"27.2"}
保存方法:
@PostMapping
public ResponseEntity<?> createCalc(@Valid @RequestBody Calc calc) {
store.add(measurement);
}
...
商店课程
private HashMap<ZonedDateTime, Calc> calcHashMap;
...
public void add(Calc calc) {
calcHashMap.put(calc.getTimestamp(), calc);
}
保存后我们想从Hashmap获取数据,以下都不能找到它。
http://localhost:8000/measurements/2015-09-01T16:40:00.000Z
or
http://localhost:8000/measurements/2015-09-01T16:40Z
我们使用的方法是
@GetMapping("/{timestamp}")
public ResponseEntity<Calc> getCalc(@PathVariable ZonedDateTime timestamp) {
Calc calc = process.fetch(timestamp);
Process.java类
public Calc fetch(ZonedDateTime timestamp) {
return calcMap.get(timestamp);
}
将其添加到Hashmap和时间戳作为键。 我们看到了这些差异:
我需要找到商店时间戳并返回对象,但由于上述差异而未找到。 怎么解决这个?
经过一些研究,我能够解决这个问题如下
for (ZonedDateTime zdt : measurementHashMap.keySet()) {
if (timestamp.toInstant().compareTo(measurementHashMap.get(zdt).getTimestamp().toInstant()) == 0) {
return measurementHashMap.get(zdt);
}
}
选项2:还有另一个选项可以将ZonedDateTime转换为OffSetDate然后进行比较。 参考: https : //rextester.com/SIIIW97667
在Calc
类中,您可以使用Jackson库中的@JsonFormat
并提供所需的模式。 在这种情况下,“yyyy-MM-dd'T'HH:mm:ss.SSSX”。 另外,我建议你直接使用OffsetDateTime
而不是转换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.