Comment obtenir une clé de valeur dans Java Hashmap

Rupam Yadav 12 octobre 2023
  1. Obtenir une clé unique à partir d’une valeur à l’aide de BidiMap en Java
  2. Obtenir une clé unique à partir d’une valeur en utilisant map.entrySet() en Java
  3. Obtention de plusieurs clés avec la valeur en utilisant l’API de Stream en Java
Comment obtenir une clé de valeur dans Java Hashmap

Hashmap est une partie essentielle de Java et nous donne la possibilité de travailler avec souplesse sur nos données en utilisant la méthode des paires clé-valeur. La valeur est attachée à la clé, et nous pouvons trouver la valeur en utilisant sa clé très facilement. Mais que faire si nous voulons récupérer la clé à partir d’une valeur ?

C’est ce dont nous allons discuter ici. Notre objectif est d’obtenir la clé qui est attachée à la valeur.

Obtenir une clé unique à partir d’une valeur à l’aide de BidiMap en Java

Nous pouvons utiliser une carte bidirectionnelle pour obtenir la clé en utilisant sa valeur. Une carte bidirectionnelle garantit qu’il n’y a pas de valeurs en double dans la carte et que la valeur peut être utilisée pour obtenir la clé. BidiMap est une carte bidirectionnelle qui est fournie avec les collections d’Apache Commons.

La première étape, et la plus importante, est d’inclure la dépendance dans notre projet.

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

L’exemple suivant a une BidiMap qui contient quatre éléments de paires clé-valeur. Comme une BidiMap contient des valeurs uniques, une clé ne peut pas avoir plusieurs valeurs. C’est pourquoi nous ne pouvons obtenir qu’une seule clé pour chaque valeur.

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

Production:

key4

Obtenir une clé unique à partir d’une valeur en utilisant map.entrySet() en Java

La carte en Java est livrée avec une méthode entrySet() que nous pouvons utiliser pour créer un ensemble d’éléments de la carte et ensuite la parcourir en boucle pour obtenir notre clé avec la valeur.

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

Production:

key2

Obtention de plusieurs clés avec la valeur en utilisant l’API de Stream en Java

Nous avons vu comment obtenir une seule clé à partir d’une valeur, mais une Map peut avoir plusieurs valeurs attachées à une seule clé. Pour obtenir toutes les clés d’une valeur, nous utiliserons la Stream API de Java 8.

L’exemple ci-dessous utilise la méthode getMultipleKeysByValue() qui prend la Map et la valeur pour trouver les clés. Elle retourne ensuite la liste des clés en conséquence.

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

Production:

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

Article connexe - Java Hashmap

Article connexe - Java Map