Guave - Karten

Guave - Karten

1. Überblick

In diesem Tutorial zeigen wir Ihnen die nützlichsten Möglichkeiten, wie Sieleverage Guava to work with Java Maps ausführen können.

Beginnen wir sehr einfach undcreate a HashMap ohne den Operatornew mit Guava:

Map aNewMap = Maps.newHashMap();

2. ImmutableMap

Weiter - sehen wir uns an, wie SieImmutableMap mitGuava erstellen:

@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

Lassen Sie uns nun einen Blick auf das Erstellen und Arbeiten mitSortedMap werfen.

Im folgenden Beispiel erstellen wir eine sortierte Karte mit dem entsprechenden Guava-Builder:

@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

Weiter - Lassen Sie uns diskutieren, wieBiMap verwendet werden. Wir könnenBiMap verwenden, um Schlüssel wieder Werten zuzuordnen, da dies sicherstellt, dass die Werte eindeutig sind.

Im folgenden Beispiel erstellen wir einBiMap und dasinverse():

@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

Schauen wir uns jetztMultimap an.

Wir könnenMultimap bisassociate each key with multiple values wie im folgenden Beispiel verwenden:

@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

Schauen wir uns nun die GuavaTablean. Wir verwendenTable, wenn wirmore than one key to index a value benötigen.

Im folgenden Beispiel verwenden wir eine Tabelle, um die Entfernungen zwischen Städten zu speichern:

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

Wir können auchTables.transpose() verwenden, um die Zeilen- und Spaltenschlüssel wie im folgenden Beispiel umzudrehen:

@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

Weiter - Schauen wir unsClassToInstanceMap an. Wir könnenClassToInstanceMap verwenden, wenn die Klasse des Objekts der Schlüssel sein soll, wie im folgenden Beispiel:

@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. GruppeList Verwenden vonMultimap

Weiter - sehen wir uns an, wie SieList mitMultimap gruppieren. Im folgenden Beispiel gruppieren wirList von Namen nach ihrer Länge mitMultimaps.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. Fazit

In diesem kurzen Tutorial haben wir die häufigsten und nützlichsten Anwendungsfälle vonworking with Maps using the Guava library besprochen.

Die Implementierung all dieser Beispiele und Codefragmentecan be found in my Guava GitHub project - dies ist ein Eclipse-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein, wie es ist.