从 Java HashMap 中的值检索键
HashMap 是一种有价值的 Java 数据结构,用于存储键值对。虽然从键中检索值很简单,但从值中检索键可能更具挑战性。以下是实现此目的的几种有效方法:
一对多映射
在多个键可以映射到单个值的情况下,您可以迭代HashMap 的条目并收集所有匹配的键:
public static <T, E> Set<T> getKeysByValue(Map<T, E> map, E value) { Set<T> keys = new HashSet<>(); for (Entry<T, E> entry : map.entrySet()) { if (Objects.equals(value, entry.getValue())) { keys.add(entry.getKey()); } } return keys; }
一对一映射
当每个值映射到唯一键时,您可以返回第一个匹配的键:
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 Stream Approach
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
对于需要双向映射的情况,可以考虑使用 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 中的值检索键?的详细内容。更多信息请关注PHP中文网其他相关文章!