多哈希映射containsValue

时间:2014-07-29 14:54:27

标签: java map hashmap

我有一个如下的hashmap

Map <String, List<String>> map = new HashMap <String, List<String>>();

我做了map.put()后,我的地图看起来像这样:

Key - key1
Values - [value1] 
Key - key2
Values - [value1, value2, value3]

现在我正在从文件中读取一行。文件是这样的:

Key:key2, Value:value1

我将key1和value1存储在名为keyRead和valueRead的2个元素中。在线阅读器内部,如果我使用的是containsKey()containsValue(),则无效。

if(map.containsKey(keyRead){
  S.O.P("Inside key match");
  if(map.containsValue(valueRead){
     S.O.P ("Inside value match");
  }
}

输出显示内部键匹配,但未显示内部值匹配。

有人可以告诉我这里缺少什么吗?

4 个答案:

答案 0 :(得分:3)

您需要执行类似

的操作
if(map.containsKey(keyRead)) {
    if(map.get(keyRead).contains(valueRead)) {
        System.out.println("Inside value match");
    }
}

答案 1 :(得分:0)

您的值是列表,而不是字符串。如果需要检查列表是否包含该字符串,则需要先获取列表,然后调用该列表的contains方法,并将该字符串作为参数传递。

答案 2 :(得分:0)

我认为你必须像这样遍历列表中的值,顺便说一下我还没有测试过代码 -

if(map.containsKey(keyRead){
    S.O.P("Inside key match");
   forEach(List l: map.get(keyRead)) {
      forEach(String s : l) {
      if(s.equals(valueRead)) {
     S.O.P ("Inside value match");
     }
      }
  }
}

答案 3 :(得分:0)

正如已经指出的那样,你不能使用值为containsValue的实例来List。尝试使用Guava的Multimap。这实现了Map,其中key映射到多个values

MultimapcontainsEntry(key, value)完全符合您的要求,因为它与密钥匹配,并且与密钥关联的列表包含值。