如何從 Java Hashmap 的值中獲取鍵值

Rupam Yadav 2023年10月12日
  1. 在 Java 中使用 BidiMap 從一個值中獲取一個單鍵
  2. 在 Java 中使用 map.entrySet() 從值中獲取單個鍵
  3. 使用 Java 中的 Stream API 從值中獲取多個鍵
如何從 Java Hashmap 的值中獲取鍵值

Hashmap 是 Java 的重要組成部分,通過使用鍵值對方法為我們提供了靈活處理資料的能力。值被附加到鍵上,我們可以很容易地使用它的鍵找到值。但是如果我們想從值中獲取鍵呢?

這就是我們要在這裡討論的問題。我們的目標是獲取附加在值上的鍵。

在 Java 中使用 BidiMap 從一個值中獲取一個單鍵

我們可以使用雙向對映 BidiMap 來使用其值來獲取鍵。雙向對映可以保證 Map 中沒有重複的值,並且可以用值來獲取鍵。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(),我們可以用它來建立一組 Map 元素,然後通過它迴圈得到我們的鍵與值。

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]
作者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

相關文章 - Java Hashmap

相關文章 - Java Map