Guide de la bi-carte goyave

Guide de la bi-carte goyave

1. Vue d'ensemble

Dans ce tutoriel, nous allons montrer comment utiliser l'interfaceBiMap de Google Guava et ses multiples implémentations.

UnBiMap (ou «carte bidirectionnelle») est un type spécial de carte qui maintient une vue inverse de la carte tout en garantissant qu'aucune valeur en double n'est présente et qu'une valeur peut toujours être utilisée en toute sécurité pour récupérer la clé.

L'implémentation de base deBiMap estHashBiMap où en interne, il utilise deuxMaps, un pour le mappage clé-valeur et l'autre pour le mappage valeur-clé.

2. BiMap de Google Guava

Voyons comment utiliser la classeBiMap.

Nous allons commencer par ajouter la dépendance de la bibliothèque Google Guava dans lespom.xml:


    com.google.guava
    guava
    21.0

La dernière version de la dépendance peut être vérifiéehere.

3. Créer une BiMap

Vous pouvez créer une instance deBiMap de plusieurs manières comme suit:

  • Si vous envisagez de traiter un objet Java personnalisé, utilisez la méthodecreate de la classe HashBiMap:

BiMap capitalCountryBiMap = HashBiMap.create();
  • Si nous avons déjà une carte existante, vous pouvez créer une instance d'unBiMap en utilisant une version surchargée de la méthodecreate d'une classeHashBiMap:

Map capitalCountryBiMap = new HashMap<>();
//...
HashBiMap.create(capitalCountryBiMap);
  • Si vous envisagez de traiter une clé de typeEnum,, utilisez la méthodecreate de la classeEnumHashBiMap:

BiMap operationStringBiMap = EnumHashBiMap.create(MyEnum.class);
  • Si vous avez l'intention de créer une carte immuable, utilisez la classeImmutableBiMap (qui suit un modèle de générateur):

BiMap capitalCountryBiMap
  = new ImmutableBiMap.Builder<>()
    .put("New Delhi", "India")
    .build();

4. Utilisation de la BiMap

Commençons par un exemple simple montrant l'utilisation deBiMap, où nous pouvons obtenir une clé basée sur une valeur et une valeur basée sur une clé:

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

Remarque: la méthodeinverse ci-dessus renvoie la vue inverse desBiMap, qui mappe chacune des valeurs de BiMap à ses clés associées.

BiMap lance unIllegalArgumentException lorsque nous essayons de stocker une valeur en double deux fois.

Voyons un exemple de la même chose:

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

Si nous souhaitons remplacer la valeur déjà présente dansBiMap, nous pouvons utiliser la méthodeforcePut:

@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. Conclusion

Dans ce tutoriel concis, nous avons illustré des exemples d'utilisation desBiMap dans la bibliothèque Guava. Il est principalement utilisé pour obtenir une clé basée sur la valeur de la carte.

L'implémentation de ces exemples peut être trouvée dansthe GitHub project - c'est un projet basé sur Maven, il devrait donc être facile à importer et à exécuter tel quel.