Como obter a chave do valor em Java Hashmap

Rupam Yadav 12 outubro 2023
  1. Obtenha uma única chave de um valor usando o BidiMap em Java
  2. Obtenha uma única chave de um valor utilizando map.entrySet() em Java
  3. Obtenha várias chaves a partir do valor utilizando o Stream API em Java
Como obter a chave do valor em Java Hashmap

O Hashmap é uma parte essencial do Java e nos dá o poder de trabalhar de forma flexível sobre nossos dados, utilizando o método do par de valores-chave. O valor é anexado à chave, e podemos encontrar o valor usando sua chave muito facilmente. Mas e se quisermos ir buscar a chave de um valor?

Isto é o que vamos discutir aqui. Nosso objetivo é obter a chave que está anexada ao valor.

Obtenha uma única chave de um valor usando o BidiMap em Java

Podemos usar um mapa bidirecional para obter a chave usando seu valor. Um mapa bidirecional garante que não haja duplicação de valores no mapa e que o valor possa ser usado para obter a chave. O BidiMap é um mapa bidirecional que vem com o Apache Commons Collections.

O primeiro e mais importante passo é incluir a dependência em nosso projeto.

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

O exemplo a seguir tem um BidiMap que contém quatro elementos de par de valores-chave. Como um BidiMap contém valores únicos, uma chave não pode ter valores múltiplos. É por isso que só podemos obter uma única chave a partir 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

Obtenha uma única chave de um valor utilizando map.entrySet() em Java

O Map em Java vem com um método entrySet() que podemos utilizar para criar um array de elementos do mapa e depois fazer um loop através dele obter nossa chave com o 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

Obtenha várias chaves a partir do valor utilizando o Stream API em Java

Vimos como obter uma única chave de valor, mas um Map pode ter vários valores anexados a uma única chave. Para obter todas as chaves de um valor, utilizaremos a Stream API do Java 8.

O exemplo abaixo utiliza o método getMultipleKeysByValue() que toma o Map e o valor para encontrar as chaves. Em seguida, ele retorna a lista de chaves 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

Artigo relacionado - Java Hashmap

Artigo relacionado - Java Map