Gids voor de Guava BiMap

1. Overzicht

In deze tutorial laten we zien hoe je de Google Guava's kunt gebruiken BiMap interface en zijn meerdere implementaties.

EEN BiMap (of "bidirectionele kaart") is een speciaal soort kaart die een omgekeerd beeld van de kaart behoudt en er tegelijkertijd voor zorgt dat er geen dubbele waarden aanwezig zijn en dat een waarde altijd veilig kan worden gebruikt om de sleutel terug te krijgen.

De basisimplementatie van BiMap is HashBiMap waar het intern gebruik maakt van twee Kaarts, één voor de sleutel tot waardetoewijzing en de andere voor de waarde naar sleuteltoewijzing.

2. Google Guava's BiMap

Laten we eens kijken hoe u de BiMap klasse.

We beginnen met het toevoegen van de afhankelijkheid van de Google Guava-bibliotheek in het pom.xml:

 com.google.guava guave 21.0 

De laatste versie van de afhankelijkheid kan hier worden gecontroleerd.

3. Een BiMap maken

U kunt een instantie van BiMap op meerdere manieren als volgt:

  • Als u te maken krijgt met een aangepast Java-object, gebruikt u de creëren methode uit de klasse HashBiMap:
BiMap capitalCountryBiMap = HashBiMap.create ();
  • Als we al een bestaande kaart hebben, kunt u een instantie van een BiMap met behulp van een overbelaste versie van de creëren methode uit een klas HashBiMap:
Kaart capitalCountryBiMap = nieuwe HashMap (); // ... HashBiMap.create (capitalCountryBiMap); 
  • Als u te maken krijgt met een sleutel van het type Enum, gebruik de creëren methode uit de klas EnumHashBiMap:
BiMap operationStringBiMap = EnumHashBiMap.create (MyEnum.class); 
  • Als u van plan bent een onveranderlijke kaart te maken, gebruikt u de ImmutableBiMap class (die een bouwerspatroon volgt):
BiMap capitalCountryBiMap = nieuwe ImmutableBiMap.Builder () .put ("New Delhi", "India") .build (); 

4. Met behulp van de BiMap

Laten we beginnen met een eenvoudig voorbeeld dat het gebruik van BiMap, waar we een sleutel kunnen krijgen op basis van een waarde en een waarde op basis van een sleutel:

@Test openbare leegte gegevenBiMap_whenQueryByValue_shouldReturnKey () {BiMap capitalCountryBiMap = HashBiMap.create (); capitalCountryBiMap.put ("New Delhi", "India"); capitalCountryBiMap.put ("Washington, D.C.", "VS"); capitalCountryBiMap.put ("Moskou", "Rusland"); String keyFromBiMap = capitalCountryBiMap.inverse (). Get ("Rusland"); String valueFromBiMap = capitalCountryBiMap.get ("Washington, D.C."); assertEquals ("Moskou", keyFromBiMap); assertEquals ("VS", valueFromBiMap); }

Merk op omgekeerd bovenstaande methode retourneert de omgekeerde weergave van de BiMap, die elk van de BiMap-waarden toewijst aan de bijbehorende sleutels.

BiMap gooit een IllegalArgumentException wanneer we proberen een dubbele waarde twee keer op te slaan.

Laten we een voorbeeld van hetzelfde bekijken:

@Test (verwacht = IllegalArgumentException.class) openbare ongeldige gegevenBiMap_whenSameValueIsPresent_shouldThrowException () {BiMap capitalCountryBiMap = HashBiMap.create (); capitalCountryBiMap.put ("Mumbai", "India"); capitalCountryBiMap.put ("Washington, D.C.", "VS"); capitalCountryBiMap.put ("Moskou", "Rusland"); capitalCountryBiMap.put ("New Delhi", "India"); } 

Als we de waarde die al aanwezig is in BiMapkunnen we gebruik maken van de forcePut methode:

@Test openbare leegte gegevenSameValueIsPresent_whenForcePut_completesSuccessfully () {BiMap capitalCountryBiMap = HashBiMap.create (); capitalCountryBiMap.put ("Mumbai", "India"); capitalCountryBiMap.put ("Washington, D.C.", "VS"); capitalCountryBiMap.put ("Moskou", "Rusland"); capitalCountryBiMap.forcePut ("New Delhi", "India"); assertEquals ("VS", capitalCountryBiMap.get ("Washington, D.C.")); assertEquals ("Washington, D.C.", capitalCountryBiMap.inverse (). get ("VS")); }

5. Conclusie

In deze beknopte tutorial hebben we voorbeelden geïllustreerd van het gebruik van de BiMap in de Guava-bibliotheek. Het wordt voornamelijk gebruikt om een ​​sleutel te krijgen op basis van de waarde van de kaart.

De implementatie van deze voorbeelden is te vinden in het GitHub-project - dit is een op Maven gebaseerd project, dus het moet gemakkelijk kunnen worden geïmporteerd en uitgevoerd zoals het is.