Java Hashmap:如何从值中获取键?

如果我有值“foo”,以及HashMap<字符串>ftw对于其中的ftw.containsValue(“foo”)返回true,如何获取相应的密钥?我必须循环使用hashmap吗?最好的方法是什么

如果您的数据结构在键和值之间具有多对一映射,您应该迭代条目并选择所有合适的键:

公共静态<T、 E>设置<T>getKeysByValue(映射<T,E>映射,E值){
Set<T>keys=新哈希集<T>();
对于(条目<T,E>条目:map.entrySet()){
if(Objects.equals(value,entry.getValue())){
key.add(entry.getKey());
}
}
返回键;
}

如果是一对一关系,您可以返回第一个匹配的键:

公共静态<T、 E>T getKeyByValue(映射<T,E>映射,E值){
对于(条目<T,E>条目:map.entrySet()){
if(Objects.equals(value,entry.getValue())){
return entry.getKey();
}
}
返回null;
}

在Java 8中:

公共静态<T、 E>设置<T>getKeysByValue(映射<T,E>映射,E值){
return map.entrySet()
.stream()
.filter(entry->Objects.equals(entry.getValue(),value))
.map(map.Entry::getKey)
.collect(收集器.toSet());
}

此外,对于Guava用户,BiMap可能有用。例如:

BiMap<令牌、字符>tokenToChar=
ImmutableBiMap.of(Token.LEFT_括号,“[”,Token.LEFT_括号,“(”);
Token-Token=tokenToChar.inverse().get('(');
字符c=tokenToChar.get(令牌);

发表评论