gpt4 book ai didi

Java HashMap : How to get key from value?

转载 作者:bug小助手 更新时间:2023-10-28 01:35:55 24 4
gpt4 key购买 nike

如果我有值 "foo" , 和 HashMap<String> ftw ftw.containsValue("foo")返回 true ,我怎样才能得到对应的 key ?我必须遍历 HashMap 吗?最好的方法是什么?

最佳答案

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

public static <T, E> Set<T> getKeysByValue(Map<T, E> map, E value) {
Set<T> keys = new HashSet<T>();
for (Entry<T, E> entry : map.entrySet()) {
if (Objects.equals(value, entry.getValue())) {
keys.add(entry.getKey());
}
}
return keys;
}

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

public static <T, E> T getKeyByValue(Map<T, E> map, E value) {
for (Entry<T, E> entry : map.entrySet()) {
if (Objects.equals(value, entry.getValue())) {
return entry.getKey();
}
}
return null;
}

在 Java 8 中:

public static <T, E> Set<T> getKeysByValue(Map<T, E> map, E value) {
return map.entrySet()
.stream()
.filter(entry -> Objects.equals(entry.getValue(), value))
.map(Map.Entry::getKey)
.collect(Collectors.toSet());
}

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

BiMap<Token, Character> tokenToChar = 
ImmutableBiMap.of(Token.LEFT_BRACKET, '[', Token.LEFT_PARENTHESIS, '(');
Token token = tokenToChar.inverse().get('(');
Character c = tokenToChar.get(token);

关于Java HashMap : How to get key from value?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1383797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com