Guava - Mappe

1. Panoramica

In questo tutorial illustreremo i modi più utili per sfruttare Guava per lavorare con Java Maps .

Cominciamo in modo molto semplice e creiamo una HashMap senza il nuovo operatore, usando Guava:

Map aNewMap = Maps.newHashMap();

2. ImmutableMap

Avanti - vediamo come creare ImmutableMap usando Guava :

@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

Ora, diamo un'occhiata alla creazione e al lavoro con una SortedMap .

Nell'esempio seguente, stiamo creando una mappa ordinata utilizzando il corrispondente 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

Successivamente, discutiamo come utilizzare BiMap . Possiamo utilizzare BiMap per mappare le chiavi sui valori in quanto garantisce che i valori siano univoci.

Nel seguente esempio, creiamo una BiMap e otteniamo la sua 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

Ora, diamo un'occhiata a Multimap .

Possiamo usare Multimap per associare ogni chiave a più valori come nell'esempio seguente:

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

Diamo ora un'occhiata al tavolo Guava ; usiamo Table se abbiamo bisogno di più di una chiave per indicizzare un valore .

Nell'esempio seguente, utilizzeremo una tabella per memorizzare le distanze tra le città:

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

Possiamo anche usare Tables.transpose () per capovolgere i tasti di riga e colonna come nell'esempio seguente:

@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

Avanti: diamo un'occhiata a ClassToInstanceMap . Possiamo usare ClassToInstanceMap se vogliamo che la classe dell'oggetto sia la chiave come nell'esempio seguente:

@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. Elenco gruppi utilizzando Multimap

Successivamente, vediamo come raggruppare un elenco utilizzando Multimap . Nell'esempio seguente, raggruppiamo un elenco di nomi in base alla loro lunghezza utilizzando 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. Conclusione

In questo breve tutorial abbiamo discusso i casi d'uso più comuni e utili di lavorare con Maps utilizzando la libreria Guava .

L'implementazione di tutti questi esempi e frammenti di codice può essere trovata nel mio progetto Guava GitHub : questo è un progetto basato su Eclipse, quindi dovrebbe essere facile da importare ed eseguire così com'è.