如何从 Java Hashmap 的值中获取键值

  1. 在 Java 中使用 BidiMap 从一个值中获取一个单键
  2. 在 Java 中使用 map.entrySet() 从值中获取单个键
  3. 使用 Java 中的 Stream API 从值中获取多个键

Hashmap 是 Java 的重要组成部分,通过使用键值对方法为我们提供了灵活处理数据的能力。值被附加到键上,我们可以很容易地使用它的键找到值。但是如果我们想从值中获取键呢?

这就是我们要在这里讨论的问题。我们的目标是获取附加在值上的键。

在 Java 中使用 BidiMap 从一个值中获取一个单键

我们可以使用双向映射 BidiMap 来使用其值来获取密钥。双向映射可以保证地图中没有重复的值,并且可以用值来获取键。BidiMap 是 Apache Commons Collections 自带的一个双向 Map

第一步也是最重要的一步是将依赖项包含在我们的项目中。

<dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.1</version>
        </dependency>

下面的例子中有一个包含四个键值对元素的 BidiMap。由于 BidiMap 包含唯一的值,一个键不能有多个值。这就是为什么我们只能从每个值中得到一个键。

import org.apache.commons.collections4.BidiMap;
import org.apache.commons.collections4.bidimap.TreeBidiMap;

public class Main {
    public static void main(String[] args) {

        BidiMap<String, String> bidiMap = new TreeBidiMap<>();

        bidiMap.put("key1", "value1");
        bidiMap.put("key2", "value2");
        bidiMap.put("key3", "value3");
        bidiMap.put("key4", "value4");

        System.out.println(bidiMap.getKey("value4"));

    }
}

输出:

key4

在 Java 中使用 map.entrySet() 从值中获取单个键

Java 中的 Map 自带了一个方法 entrySet(),我们可以用它来创建一组地图元素,然后通过它循环得到我们的键与值。

import java.util.*;

public class Main {
    public static void main(String[] args) {

        Map<String, Object> sampleMap = new HashMap<>();
        sampleMap.put("key1", "value1");
        sampleMap.put("key2", "value2");
        sampleMap.put("key3", "value3");
        sampleMap.put("key4", "value4");

        String getKeyFromValue = getSingleKeyFromValue(sampleMap, "value2");
        System.out.println(getKeyFromValue);
    }

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

输出:

key2

使用 Java 中的 Stream API 从值中获取多个键

我们看到了如何从值中获取一个键,但一个 Map 可以有多个值附加到一个键上。为了得到一个值的所有键,我们将使用 Java 8 的 Stream API

下面的例子采用 getMultipleKeysByValue() 方法,它需要 Map 和值来寻找键。然后它返回结果的键列表。


import java.util.*;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {

        Map<String, Object> sampleMap = new HashMap<>();
        sampleMap.put("key1", "value1");
        sampleMap.put("key2", "value1");
        sampleMap.put("key3", "value2");
        sampleMap.put("key4", "value1");

       List<String> getKeysFromValue = getMultipleKeysByValue(sampleMap, "value1");
        System.out.println(getKeysFromValue);
    }

    public static <String> List<String> getMultipleKeysByValue(Map<String, Object> map, Object value) {
        return map.entrySet()
                .stream()
                .filter(entry -> Objects.equals(entry.getValue(), value))
                .map(Map.Entry::getKey)
                .collect(Collectors.toList());
    }
}

输出:

[key1, key2, key4]

相关文章 - Java Hashmap

  • 如何在 Java 中把 Hashmap 转换为 JSON 对象
  • 相关文章 - Java Map

  • 如何在 Java 中将 JSON 转换为 Map
  • 相关文章 - Java

  • 如何在 Java 中将 JSON 转换为 Map
  • 如何在 Java 中遍历 Map 的每个元素
  • comments powered by Disqus