📜  java map 从 value 中获取 key - Java (1)

📅  最后修改于: 2023-12-03 14:42:15.218000             🧑  作者: Mango

Java HashMap 从 Value 中获取 Key

在 Java 中,HashMap 是一个非常常用的数据结构,它可以快速地进行键值对的存取,是使用频率最高的集合之一。有时候我们需要根据 value 来获取 key,那么该如何实现呢?

方法一:遍历

最简单的方法就是遍历 HashMap,逐一比较每个 value 的值,如果匹配到了,就返回对应的 key。这种方法的缺点是时间复杂度较高,不适用于大型数据。

public static <T, E> T getKeyByValue(Map<T, E> map, E value) {
    for (Map.Entry<T, E> entry : map.entrySet()) {
        if (value.equals(entry.getValue())) {
            return entry.getKey();
        }
    }
    return null;
}
方法二:利用双向Map

双向 Map 是一种能够同时以键或者值为索引访问的 Map 实现。Guava 的 BiMap 就是这样的一个实现。我们可以使用 BiMap.inverse() 方法,让值变成键,键变成值,然后就可以直接获取到值对应的键了。

public static <K, V> K getKeyByValueBiMap(BiMap<K, V> map, V value) {
    return map.inverse().get(value);
}
方法三:利用Java 8 Stream

Java 8 引入了新的 Stream API,我们可以使用 entrySet().stream().filter() 方法来过滤出对应的 Entry。然后我们可以通过 Optional 类型来避免 null 值的情况。

public static <K, V> K getKeyByValueStream(Map<K, V> map, V value) {
    Optional<K> optional = map.entrySet()
                                .stream()
                                .filter(entry -> Objects.equals(entry.getValue(), value))
                                .map(Map.Entry::getKey)
                                .findFirst();
    return optional.orElse(null);
}

使用以上三种方法,可以方便快捷地从 HashMap 中获取对应 valuekey