-1

我有 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。但为什么?如果在应用程序中,我总是从我的变量(而不是文件)中读取地图。

4

1 回答 1

1

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

Map<String, GooglePlayGame> temporary = mapper.readValue(new File(
          "gpgames_library.json"), mapType);
games.putAll(temporary);
于 2020-03-22T17:38:50.147 回答