Leitfaden zur Guava BiMap

1. Übersicht

In diesem Tutorial zeigen wir Ihnen, wie Sie die BiMap- Oberfläche von Google Guava und ihre zahlreichen Implementierungen verwenden.

Eine BiMap (oder „bidirektionale Karte“) ist eine spezielle Art einer Karte, die eine umgekehrte Ansicht der Karte beibehält und gleichzeitig sicherstellt, dass keine doppelten Werte vorhanden sind und ein Wert immer sicher verwendet werden kann, um den Schlüssel zurückzubekommen.

Die grundlegende Implementierung von bimap ist HashBiMap wo es intern Verwendung von zwei macht Map s, ein für den Schlüssel zum Werte - Mapping und die andere für den Wert zu Keymapping.

2. Die BiMap von Google Guava

Schauen wir uns an, wie die BiMap- Klasse verwendet wird.

Zunächst fügen wir die Abhängigkeit der Google Guava-Bibliothek in die Datei pom.xml ein :

 com.google.guava guava 21.0 

Die neueste Version der Abhängigkeit kann hier überprüft werden.

3. Erstellen einer BiMap

Sie können eine Instanz von BiMap auf verschiedene Arten erstellen :

  • Wenn Sie mit einem benutzerdefinierten Java-Objekt arbeiten möchten , verwenden Sie die Methode create aus der Klasse HashBiMap:
BiMap capitalCountryBiMap = HashBiMap.create();
  • Wenn bereits eine Map vorhanden ist, können Sie eine Instanz einer BiMap mit einer überladenen Version der create- Methode aus einer Klasse HashBiMap erstellen :
Map capitalCountryBiMap = new HashMap(); //... HashBiMap.create(capitalCountryBiMap); 
  • Wenn Sie sich mit einem Schlüssel vom Typ Enum befassen möchten , verwenden Sie die Methode create aus der Klasse EnumHashBiMap :
BiMap operationStringBiMap = EnumHashBiMap.create(MyEnum.class); 
  • Wenn Sie eine unveränderliche Map erstellen möchten, verwenden Sie die ImmutableBiMap- Klasse (die einem Builder-Muster folgt):
BiMap capitalCountryBiMap = new ImmutableBiMap.Builder() .put("New Delhi", "India") .build(); 

4. Verwenden der BiMap

Beginnen wir mit einem einfachen Beispiel, das die Verwendung von BiMap zeigt, wo wir einen Schlüssel basierend auf einem Wert und einen Wert basierend auf einem Schlüssel erhalten können:

@Test public void givenBiMap_whenQueryByValue_shouldReturnKey() { BiMap capitalCountryBiMap = HashBiMap.create(); capitalCountryBiMap.put("New Delhi", "India"); capitalCountryBiMap.put("Washington, D.C.", "USA"); capitalCountryBiMap.put("Moscow", "Russia"); String keyFromBiMap = capitalCountryBiMap.inverse().get("Russia"); String valueFromBiMap = capitalCountryBiMap.get("Washington, D.C."); assertEquals("Moscow", keyFromBiMap); assertEquals("USA", valueFromBiMap); }

Hinweis: Die obige inverse Methode gibt die inverse Ansicht der BiMap zurück , die jeden der BiMap-Werte den zugehörigen Schlüsseln zuordnet.

BiMap löst eine IllegalArgumentException aus, wenn wir versuchen, einen doppelten Wert zweimal zu speichern.

Sehen wir uns ein Beispiel dafür an:

@Test(expected = IllegalArgumentException.class) public void givenBiMap_whenSameValueIsPresent_shouldThrowException() { BiMap capitalCountryBiMap = HashBiMap.create(); capitalCountryBiMap.put("Mumbai", "India"); capitalCountryBiMap.put("Washington, D.C.", "USA"); capitalCountryBiMap.put("Moscow", "Russia"); capitalCountryBiMap.put("New Delhi", "India"); } 

Wenn wir den bereits in BiMap vorhandenen Wert überschreiben möchten , können wir die forcePut- Methode verwenden:

@Test public void givenSameValueIsPresent_whenForcePut_completesSuccessfully() { BiMap capitalCountryBiMap = HashBiMap.create(); capitalCountryBiMap.put("Mumbai", "India"); capitalCountryBiMap.put("Washington, D.C.", "USA"); capitalCountryBiMap.put("Moscow", "Russia"); capitalCountryBiMap.forcePut("New Delhi", "India"); assertEquals("USA", capitalCountryBiMap.get("Washington, D.C.")); assertEquals("Washington, D.C.", capitalCountryBiMap.inverse().get("USA")); }

5. Schlussfolgerung

In diesem kurzen Tutorial haben wir Beispiele für die Verwendung der BiMap in der Guava-Bibliothek veranschaulicht . Es wird hauptsächlich verwendet, um einen Schlüssel basierend auf dem Wert aus der Karte zu erhalten.

Die Implementierung dieser Beispiele finden Sie im GitHub-Projekt - dies ist ein Maven-basiertes Projekt, daher sollte es einfach zu importieren und unverändert auszuführen sein.