如果您的数据结构有多对一键和值之间的映射应该迭代条目并选择所有合适的键:public static Set getKeysByValue(Map map, E value) {
Set keys = new HashSet();
for (Entry entry : map.entrySet()) {
if (Objects.equals(value, entry.getValue())) {
keys.add(entry.getKey());
}
}
return keys;}
如果一对一关系,您可以返回第一个匹配的键:public static T getKeyByValue(Map map, E value) {
for (Entry entry : map.entrySet()) {
if (Objects.equals(value, entry.getValue())) {
return entry.getKey();
}
}
return null;}
在Java 8中:public static Set getKeysByValue(Map map, E value) {
return map.entrySet()
.stream()
.filter(entry -> Objects.equals(entry.getValue(), value))
.map(Map.Entry::getKey)
.collect(Collectors.toSet());}
另外,对于番石榴使用者来说,双图可能有用。例如:BiMap tokenToChar =
ImmutableBiMap.of(Token.LEFT_BRACKET, '[', Token.LEFT_PARENTHESIS, '(');Token token = tokenToChar.inverse().get('(');
Character c = tokenToChar.get(token);