Guave - Karten

1. Übersicht

In diesem Tutorial zeigen wir Ihnen die nützlichsten Möglichkeiten, wie Sie Guava für die Arbeit mit Java Maps nutzen können .

Beginnen wir ganz einfach und erstellen eine HashMap ohne den neuen Operator mit Guava:

Map aNewMap = Maps.newHashMap();

2. Unveränderliche Karte

Weiter - mal sehen, wie man ImmutableMap mit Guava erstellt :

@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 mit einer SortedMap 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

Als nächstes wollen wir die Verwendung von BiMap diskutieren . Wir können BiMap verwenden , um Schlüssel wieder Werten zuzuordnen , um sicherzustellen, dass die Werte eindeutig sind.

Im folgenden Beispiel erstellen wir eine BiMap und erhalten deren inverse () :

@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 jetzt Multimap an .

Wir können Multimap verwenden, um jeden Schlüssel mehreren Werten zuzuordnen , wie im folgenden Beispiel:

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

Lassen Sie uns jetzt einen Blick auf die Guava nehmen Tabelle ; Wir verwenden Table, wenn wir mehr als einen Schlüssel benötigen, um einen Wert zu indizieren .

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 auch Tables.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 uns ClassToInstanceMap an . Wir können ClassToInstanceMap 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. Gruppenliste Verwenden von Multimap

Weiter - sehen wir uns an, wie Sie eine Liste mit Multimap gruppieren . Im folgenden Beispiel gruppieren wir eine Liste von Namen nach ihrer Länge mit Multimaps.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 für die Arbeit mit Maps mithilfe der Guava-Bibliothek erläutert .

Die Implementierung all dieser Beispiele und Codefragmente finden Sie in meinem Guava GitHub-Projekt - dies ist ein Eclipse-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein, wie es ist.