不敏感的线程安全 Map 无法正常工作
Insensetive thread safe Map doesnt work properly
我的 ConcurrentSkipListMap 具有不敏感的键特征:
public static ConcurrentMap<String, GooglePlayGame> games = new ConcurrentSkipListMap<String, GooglePlayGame>(String.CASE_INSENSITIVE_ORDER);
如果我 运行 我的应用是第一次并将添加到地图用户请求,f.e。我完成了 --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();
}
}
如果在 "restart" 之后用户尝试 /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);
我的 ConcurrentSkipListMap 具有不敏感的键特征:
public static ConcurrentMap<String, GooglePlayGame> games = new ConcurrentSkipListMap<String, GooglePlayGame>(String.CASE_INSENSITIVE_ORDER);
如果我 运行 我的应用是第一次并将添加到地图用户请求,f.e。我完成了 --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();
}
}
如果在 "restart" 之后用户尝试 /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);