具有多个键的HashMap导致单个值

时间:2017-10-26 19:22:17

标签: java hashmap

有时两个单词(或单词的变体)被映射到相同的单词 响应。通过将同义词或相关表达式映射到同一个字符串来处理此问题,这样您就不需要在响应映射中为同一个响应添加多个条目。

我需要避免两次添加相同的值。下面的键是从分割为单个单词的用户输入创建的。以下值是为包含键的用户输入生成的响应。

responseMap.put("bug", 
                    "Well, you know, all software has some bugs. But our 
software engineers\n" +
                    "are working very hard to fix them. Can you describe the 
problem a bit\n" +
                    "further?");
    responseMap.put("buggy", 
                    "Well, you know, all software has some bugs. But our 
software engineers\n" +
                    "are working very hard to fix them. Can you describe the 
problem a bit\n" +
                    "further?");

我如何添加这样的"多个"钥匙?在参数中 - 例如,K可以是正则表达式吗?或者我应该创建一个HashMap,其中K是某个单词,V包含其sysnonyms的arraylist,然后尝试迭代ArrayList以将分割的用户输入与ArrayList中的元素进行比较以提取必要的键?

P.S。我不是这样做的学生。这只是为了自我教育,我没有老师提出任何问题。

2 个答案:

答案 0 :(得分:0)

我想说的是使用同义词列表。

List<String> synonyms = new ArrayList<String>();
synonyms.add("Bug");
synonyms.add("Buggy");

if(synonyms.contains(userInputString)){
Map.get("bug");
}

为每个地图键创建一个这样的集合...如果列表足够短,实际可行。但是根据定义,Map应该有唯一的密钥。

答案 1 :(得分:0)

再次阅读这部分说明“通过将同义词或相关表达式映射到相同的字符串来处理此问题”这听起来像 分两步执行查找。

首先,您可以获得相同值的所有可能同义词的映射,例如

bug → bug
buggy → bug
mistake → bug
other → something else
etc.

然后是第二个带有响应规范键的地图

bug → "Well, you know, all software has some bugs..."

因此查找包括检查第一个地图以找到要在第二个地图中使用的密钥,然后将提供所需的响应。