我有一个如下的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");
}
}
输出显示内部键匹配,但未显示内部值匹配。
有人可以告诉我这里缺少什么吗?
答案 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
。
Multimap
有containsEntry(key, value)完全符合您的要求,因为它与密钥匹配,并且与密钥关联的列表包含值。