Cómo obtener la clave del valor en Java Hashmap

Rupam Yadav 12 octubre 2023
  1. Obtener una única clave de un valor usando BidiMap en Java
  2. Obtener una única clave de un valor usando map.entrySet() en Java
  3. Obtener múltiples claves del valor usando el Stream API en Java
Cómo obtener la clave del valor en Java Hashmap

Hashmap es una parte esencial de Java y nos da el poder de trabajar de forma flexible en nuestros datos utilizando el método del par clave-valor. El valor se adjunta a la clave, y podemos encontrar el valor usando su clave muy fácilmente. ¿Pero qué pasa si queremos obtener la clave de un valor?

Esto es lo que vamos a discutir aquí. Nuestro objetivo es obtener la clave que está asociada al valor.

Obtener una única clave de un valor usando BidiMap en Java

Podemos usar un mapa bidireccional para obtener la clave usando su valor. Un mapa bidireccional asegura que no haya valores duplicados en el mapa y que el valor pueda ser usado para obtener la clave. BidiMap es un mapa bidireccional que viene con las Colecciones Comunes de Apache.

El primer y más importante paso es incluir la dependencia en nuestro proyecto.

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

El siguiente ejemplo tiene un BidiMap que contiene cuatro elementos del par llave-valor. Como un BidiMap contiene valores únicos, una clave no puede tener valores múltiples. Por eso sólo podemos obtener una única clave de cada valor.

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

Resultado:

key4

Obtener una única clave de un valor usando map.entrySet() en Java

Map en Java viene con un método entrySet() que podemos usar para crear un conjunto de los elementos del mapa y luego hacer un bucle a través de él para obtener nuestra clave con el valor.

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

Resultado:

key2

Obtener múltiples claves del valor usando el Stream API en Java

Vimos cómo obtener una única clave de valor, pero un Map puede tener múltiples valores adjuntos a una única clave. Para obtener todas las claves de un valor, usaremos el Stream API de Java 8.

El siguiente ejemplo tiene el método getMultipleKeysByValue() que toma el Map y el valor para encontrar las claves. Luego devuelve la lista de claves como resultado.

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

Resultado:

[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

Artículo relacionado - Java Hashmap

Artículo relacionado - Java Map