Cómo obtener la clave del valor en Java Hashmap
- Obtener una única clave de un valor usando BidiMap en Java
-
Obtener una única clave de un valor usando
map.entrySet()
en Java - Obtener múltiples claves del valor usando el Stream API en Java
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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn