Goyave - Cartes

Goyave - Cartes

1. Vue d'ensemble

Dans ce didacticiel, nous allons illustrer les méthodes les plus utiles pour utiliserleverage Guava to work with Java Maps.

Commençons très simplement etcreate a HashMap sans l'opérateurnew, en utilisant Guava:

Map aNewMap = Maps.newHashMap();

2. ImmutableMap

Ensuite, voyons comment créerImmutableMap en utilisantGuava:

@Test
public void whenCreatingImmutableMap_thenCorrect() {
    Map salary = ImmutableMap. builder()
      .put("John", 1000)
      .put("Jane", 1500)
      .put("Adam", 2000)
      .put("Tom", 2000)
      .build();

    assertEquals(1000, salary.get("John").intValue());
    assertEquals(2000, salary.get("Tom").intValue());
}

3. SortedMap

Voyons maintenant comment créer et travailler avec unSortedMap.

Dans l'exemple suivant, nous créons une carte triée à l'aide du générateur Guava correspondant:

@Test
public void whenUsingSortedMap_thenKeysAreSorted() {
    ImmutableSortedMap salary = new ImmutableSortedMap
      .Builder(Ordering.natural())
      .put("John", 1000)
      .put("Jane", 1500)
      .put("Adam", 2000)
      .put("Tom", 2000)
      .build();

    assertEquals("Adam", salary.firstKey());
    assertEquals(2000, salary.lastEntry().getValue().intValue());
}

4. BiMap

Ensuite, voyons comment utiliserBiMap. Nous pouvons utiliserBiMap pour mapper les clés aux valeurs car cela garantit que les valeurs sont uniques.

Dans l'exemple suivant - nous créons unBiMap et le nous obtenons sesinverse():

@Test
public void whenCreateBiMap_thenCreated() {
    BiMap words = HashBiMap.create();
    words.put("First", 1);
    words.put("Second", 2);
    words.put("Third", 3);

    assertEquals(2, words.get("Second").intValue());
    assertEquals("Third", words.inverse().get(3));
}

5. Multimap

Maintenant, jetons un œil àMultimap.

Nous pouvons utiliserMultimap àassociate each key with multiple values comme dans l'exemple suivant:

@Test
public void whenCreateMultimap_thenCreated() {
    Multimap multimap = ArrayListMultimap.create();
    multimap.put("fruit", "apple");
    multimap.put("fruit", "banana");
    multimap.put("pet", "cat");
    multimap.put("pet", "dog");

    assertThat(multimap.get("fruit"), containsInAnyOrder("apple", "banana"));
    assertThat(multimap.get("pet"), containsInAnyOrder("cat", "dog"));
}

5. Table

Jetons maintenant un coup d’œil aux GuavaTable; nous utilisonsTable si nous avons besoin demore than one key to index a value.

Dans l'exemple suivant, nous allons utiliser un tableau pour stocker les distances entre les villes:

@Test
public void whenCreatingTable_thenCorrect() {
    Table distance = HashBasedTable.create();
    distance.put("London", "Paris", 340);
    distance.put("New York", "Los Angeles", 3940);
    distance.put("London", "New York", 5576);

    assertEquals(3940, distance.get("New York", "Los Angeles").intValue());
    assertThat(distance.columnKeySet(),
      containsInAnyOrder("Paris", "New York", "Los Angeles"));
    assertThat(distance.rowKeySet(), containsInAnyOrder("London", "New York"));
}

Nous pouvons également utiliserTables.transpose() pour retourner les clés de ligne et de colonne comme dans l'exemple suivant:

@Test
public void whenTransposingTable_thenCorrect() {
    Table distance = HashBasedTable.create();
    distance.put("London", "Paris", 340);
    distance.put("New York", "Los Angeles", 3940);
    distance.put("London", "New York", 5576);

    Table transposed = Tables.transpose(distance);

    assertThat(transposed.rowKeySet(),
      containsInAnyOrder("Paris", "New York", "Los Angeles"));
    assertThat(transposed.columnKeySet(), containsInAnyOrder("London", "New York"));
}

6. ClassToInstanceMap

Ensuite - Jetons un œil àClassToInstanceMap. Nous pouvons utiliserClassToInstanceMap si nous voulons que la classe de l'objet soit la clé comme dans l'exemple suivant:

@Test
public void whenCreatingClassToInstanceMap_thenCorrect() {
    ClassToInstanceMap numbers = MutableClassToInstanceMap.create();
    numbers.putInstance(Integer.class, 1);
    numbers.putInstance(Double.class, 1.5);

    assertEquals(1, numbers.get(Integer.class));
    assertEquals(1.5, numbers.get(Double.class));
}

7. GroupeList Utilisation deMultimap

Ensuite, voyons comment grouper unList en utilisantMultimap. Dans l'exemple suivant, nous regroupons unList de noms par leur longueur en utilisantMultimaps.index():

@Test
public void whenGroupingListsUsingMultimap_thenGrouped() {
    List names = Lists.newArrayList("John", "Adam", "Tom");
    Function func = new Function(){
        public Integer apply(String input) {
            return input.length();
        }
    };
    Multimap groups = Multimaps.index(names, func);

    assertThat(groups.get(3), containsInAnyOrder("Tom"));
    assertThat(groups.get(4), containsInAnyOrder("John", "Adam"));
}

8. Conclusion

Dans ce rapide tutoriel, nous avons discuté des cas d'utilisation les plus courants et les plus utiles deworking with Maps using the Guava library.

La mise en œuvre de tous ces exemples et extraits de codecan be found in my Guava GitHub project - il s'agit d'un projet basé sur Eclipse, il devrait donc être facile à importer et à exécuter tel quel.