從 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中文網其他相關文章!