问题描述
我有一个类型为concurrentskiplistmap
的全局变量,定义如下:
static ConcurrentNavigableMap<zoneddatetime,String> notificationMap = new concurrentskiplistmap<zoneddatetime,String>(Comparator.comparingLong(v -> v.toInstant().toEpochMilli()));
我要对这张地图进行以下操作
- 检查地图中是否已存在新项目
- 如果不存在,则将新项目添加到地图中。
我还想删除3分钟以上的项目。所以我的实现是这样的
private Boolean isDuplicateNotification(String hMac,String jsonString) {
try (JsonReader jsonReader = Json.createReader(new StringReader(jsonString))) {
notificationMap = getEventsFromLastthreeMinutes();
if (notificationMap.containsValue(hMac))
return true;
return false;
}
}
private void storeNotification(String hMac) {
WebHookEvent event = new WebHookEvent(eventTime,hMac);
notificationMap.put(event.eventTime,event.hmac);
}
public static ConcurrentNavigableMap<zoneddatetime,String> getEventsFromLastthreeMinutes() {
return notificationMap.tailMap(zoneddatetime.Now().minusMinutes(3));
}
如果我在3分钟后收到新商品,我的地图就会变空(如果在3分钟内仅收到1件商品),并且在storeNotification事件中,它会返回以下异常
SRVE0777E:引发异常
应用程序类 'java.util.concurrent.concurrentskiplistmap $ SubMap.checkKeyBounds:2,435' [INFO] java.lang.IllegalArgumentException:键超出 rangejava.base / java.util.concurrent.concurrentskiplistmap $ SubMap.checkKeyBounds(concurrentskiplistmap.java:2435)
但是如果我再发送一次。.
它将毫无问题地添加到地图中。我该如何实现?我们可以在不重新分配地图的情况下从地图中删除多个项目吗? 请帮我。 谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)