Wie man Schlüssel von Werten in Java Hashmap erhält

Rupam Yadav 12 Oktober 2023
  1. Mit BidiMap in Java einen einzelnen Schlüssel aus einem Wert holen
  2. Einen einzelnen Schlüssel aus einem Wert mit map.entrySet() in Java erhalten
  3. Mehrere Schlüssel aus dem Wert mit Hilfe der Stream-API in Java erhalten
Wie man Schlüssel von Werten in Java Hashmap erhält

Hashmap ist ein wesentlicher Bestandteil von Java und gibt uns die Möglichkeit, flexibel an unseren Daten zu arbeiten, indem wir die Schlüssel-Wertepaar-Methode verwenden. Der Wert wird dem Schlüssel zugeordnet, und wir können den Wert unter Verwendung seines Schlüssels sehr leicht finden. Was aber, wenn wir den Schlüssel von einem Wert holen wollen?

Darüber werden wir hier diskutieren. Unser Ziel ist es, den Schlüssel zu erhalten, der dem Wert zugeordnet ist.

Mit BidiMap in Java einen einzelnen Schlüssel aus einem Wert holen

Wir können eine bidirektionale Map verwenden, um den Schlüssel über seinen Wert zu erhalten. Eine bidirektionale Map stellt sicher, dass keine doppelten Werte in der Map vorhanden sind und dass der Wert zur Ermittlung des Schlüssels verwendet werden kann. BidiMap ist eine bidirektionale Map, die mit den Apache Commons-Sammlungen geliefert wird.

Der erste und wichtigste Schritt ist die Einbeziehung der Abhängigkeit in unser Projekt.

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

Das folgende Beispiel hat eine BidiMap, die vier Elemente eines Schlüssel-Wert-Paares enthält. Da eine BidiMap eindeutige Werte enthält, kann ein Schlüssel nicht mehrere Werte haben. Aus diesem Grund können wir von jedem Wert nur einen einzigen Schlüssel erhalten.

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"));
  }
}

Ausgabe:

key4

Einen einzelnen Schlüssel aus einem Wert mit map.entrySet() in Java erhalten

Map in Java kommt mit einer Methode entrySet(), die wir benutzen können, um eine Menge der Mapelemente zu erstellen und dann durch sie hindurchzuschleifen, um unseren Schlüssel mit dem Wert zu erhalten.

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;
  }

Ausgabe:

key2

Mehrere Schlüssel aus dem Wert mit Hilfe der Stream-API in Java erhalten

Wir haben gesehen, wie man einen einzelnen Schlüssel aus einem Wert erhält, aber eine Map kann mehrere Werte mit einem einzelnen Schlüssel verknüpft haben. Um alle Schlüssel eines Wertes zu erhalten, werden wir die Stream API von Java 8 verwenden.

Das folgende Beispiel hat die Methode getMultipleKeysByValue(), die die Map und den Wert verwendet, um die Schlüssel zu finden. Dann gibt sie als Ergebnis die Liste der Schlüssel zurück.

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());
  }
}

Ausgabe:

[key1, key2, key4]
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

Verwandter Artikel - Java Hashmap

Verwandter Artikel - Java Map