不敏感的线程安全映射无法正常工作



我有带插入密钥feaure:的ConcurrentSkipListMap

public static ConcurrentMap<String, GooglePlayGame> games = new ConcurrentSkipListMap<String, GooglePlayGame>(String.CASE_INSENSITIVE_ORDER);

如果我第一次运行我的应用程序,并将添加到地图用户请求中,例如我完成了--games.put("Oddmar",…(--,如果用户在这之后会请求--/game Oddmar(Oddmar或其他什么(--它会起作用,但是。。我总是在静态块的开头从json文件加载我的地图:

static {
TypeFactory typeFactory = mapper.getTypeFactory();
MapType mapType = typeFactory.constructMapType(ConcurrentSkipListMap.class, String.class, GooglePlayGame.class);
try {
games = mapper.readValue(new File(
"gpgames_library.json"), mapType);
} catch (IOException e) {
e.printStackTrace();
}
}

如果"重启"后用户将尝试/game oddmar,它将不会工作-只有/game oddmar。但为什么呢?如果在应用程序中,我总是从我的变量中读取地图(而不是从文件中(。

当您的"TypeFactory"创建映射时,它不使用CASE_INSENSITIVE_ORDER,而是使用自然顺序。我不知道你的"TypeFactory"是什么,但回避这个问题的一种方法是将JSON读取为临时值,然后使用putAll将从JSON文件读取的内容添加到games映射中。

Map<String, GooglePlayGame> temporary = mapper.readValue(new File(
"gpgames_library.json"), mapType);
games.putAll(temporary);

相关内容

  • 没有找到相关文章

最新更新