Ottieni chiave da valore in Java Hashmap

Rupam Yadav 12 ottobre 2023
  1. Ottieni una singola chiave da un valore utilizzando BidiMap in Java
  2. Ottieni una singola chiave da un valore utilizzando map.entrySet() in Java
  3. Ottieni più chiavi dal valore utilizzando l’API Stream in Java
Ottieni chiave da valore in Java Hashmap

Hashmap è una parte essenziale di Java e ci dà la possibilità di lavorare in modo flessibile sui nostri dati utilizzando il metodo della coppia chiave-valore. Il valore è associato alla chiave e possiamo trovare il valore usando la sua chiave molto facilmente. Ma cosa succede se vogliamo recuperare la chiave da un valore?

Questo è ciò di cui discuteremo qui. Il nostro obiettivo è ottenere la chiave collegata al valore.

Ottieni una singola chiave da un valore utilizzando BidiMap in Java

Possiamo usare una mappa bidirezionale per ottenere la chiave usando il suo valore. Una mappa bidirezionale garantisce che non siano presenti valori duplicati nella mappa e che il valore possa essere utilizzato per ottenere la chiave. BidiMap è una mappa bidirezionale fornita con le collezioni Apache Commons.

Il primo e più importante passo è includere la dipendenza nel nostro progetto.

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

Il seguente esempio ha una BidiMap che contiene quattro elementi coppia chiave-valore. Poiché una BidiMap contiene valori univoci, una chiave non può avere più valori. È per questo che possiamo ottenere solo una singola chiave da ogni valore.

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

Produzione:

key4

Ottieni una singola chiave da un valore utilizzando map.entrySet() in Java

Map in Java viene fornito con un metodo entrySet() che possiamo usare per creare un insieme di elementi della mappa e quindi eseguire un bucle attraverso di esso per ottenere la nostra chiave con il valore.

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

Produzione:

key2

Ottieni più chiavi dal valore utilizzando l’API Stream in Java

Abbiamo visto come ottenere una singola chiave da value, ma una Map può avere più valori associati a una singola chiave. Per ottenere tutte le chiavi di un valore, useremo la Stream API di Java 8.

L’esempio sotto usa il metodo getMultipleKeysByValue() che prende la Map e il valore per trovare le chiavi. Quindi restituisce l’lista delle chiavi come risultato.

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

Produzione:

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

Articolo correlato - Java Hashmap

Articolo correlato - Java Map