Guava - Kaarten

1. Overzicht

In deze tutorial laten we de handigste manieren zien die u kunt gebruik Guava om met Java Maps te werken.

Laten we heel eenvoudig beginnen en Maak een Hash kaartzonder de nieuw operator, met behulp van Guava:

Kaart aNewMap = Maps.newHashMap ();

2. Onveranderlijke kaart

Vervolgens - laten we eens kijken hoe we kunnen maken Onveranderlijke kaart gebruik makend van Guave:

@Test openbare leegte whenCreatingImmutableMap_thenCorrect () {Map salaris = ImmutableMap. builder () .put ("John", 1000) .put ("Jane", 1500) .put ("Adam", 2000) .put ("Tom", 2000) .build (); assertEquals (1000, salaris.get ("Jan"). intValue ()); assertEquals (2000, salaris.get ("Tom"). intValue ()); }

3. SortedMap

Laten we nu eens kijken naar het maken van en werken met een SortedMap.

In het volgende voorbeeld maken we een gesorteerde kaart met behulp van de bijbehorende Guava-bouwer:

@Test public void whenUsingSortedMap_thenKeysAreSorted () {ImmutableSortedMap salaris = nieuw ImmutableSortedMap .Builder (Ordering.natural ()) .put ("John", 1000) .put ("Jane", 1500) .put ("Adam", 2000). put ("Tom", 2000) .build (); assertEquals ("Adam", salaris.firstKey ()); assertEquals (2000, salaris.lastEntry (). getValue (). intValue ()); }

4. BiMap

Vervolgens - laten we bespreken hoe we deze kunnen gebruiken BiMap. We kunnen gebruiken BiMap om sleutels terug te koppelen aan waarden, omdat het ervoor zorgt dat de waarden uniek zijn.

In het volgende voorbeeld maken we een BiMap en we krijgen zijn inverse ():

@Test openbare leegte whenCreateBiMap_thenCreated () {BiMap-woorden = HashBiMap.create (); words.put ("First", 1); words.put ("Second", 2); words.put ("Third", 3); assertEquals (2, words.get ("Second"). intValue ()); assertEquals ("Derde", words.inverse (). get (3)); }

5. Multimap

Laten we nu eens kijken Multimap.

We kunnen gebruiken Multimap naar associeer elke sleutel met meerdere waarden zoals in het volgende voorbeeld:

@Test openbare leegte whenCreateMultimap_thenCreated () {Multimap multimap = ArrayListMultimap.create (); multimap.put ("fruit", "appel"); multimap.put ("fruit", "banaan"); multimap.put ("huisdier", "kat"); multimap.put ("huisdier", "hond"); assertThat (multimap.get ("fruit"), containsInAnyOrder ("appel", "banaan")); assertThat (multimap.get ("pet"), containsInAnyOrder ("kat", "hond")); }

5. Tafel

Laten we nu eens kijken naar de Guava Tafel; we gebruiken Tafel als we dat nodig hebben meer dan één sleutel om een ​​waarde te indexeren.

In het volgende voorbeeld gaan we een tabel gebruiken om de afstanden tussen steden op te slaan:

@Test openbare leegte whenCreatingTable_thenCorrect () {Tafelafstand = HashBasedTable.create (); distance.put ("Londen", "Parijs", 340); distance.put ("New York", "Los Angeles", 3940); distance.put ("Londen", "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")); }

We kunnen ook gebruik maken van Tables.transpose () om de rij- en kolomtoetsen om te draaien zoals in het volgende voorbeeld:

@Test openbare leegte whenTransposingTable_thenCorrect () {Tafelafstand = HashBasedTable.create (); distance.put ("Londen", "Parijs", 340); distance.put ("New York", "Los Angeles", 3940); distance.put ("Londen", "New York", 5576); Table transposed = Tables.transpose (afstand); assertThat (transposed.rowKeySet (), containsInAnyOrder ("Paris", "New York", "Los Angeles")); assertThat (transposed.columnKeySet (), containsInAnyOrder ("London", "New York")); }

6. ClassToInstanceMap

Volgende - Laten we eens kijken ClassToInstanceMap. We kunnen gebruiken ClassToInstanceMap als we willen dat de klasse van het object de sleutel is, zoals in het volgende voorbeeld:

@Test openbare leegte whenCreatingClassToInstanceMap_thenCorrect () {ClassToInstanceMap-nummers = 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. Groep Lijst Gebruik makend van Multimap

Vervolgens - laten we eens kijken hoe we een Lijst gebruik makend van Multimap. In het volgende voorbeeld groeperen we a Lijst van namen op basis van hun lengte met Multimaps.index ():

@Test openbare leegte whenGroupingListsUsingMultimap_thenGrouped () {List names = Lists.newArrayList ("John", "Adam", "Tom"); Functie func = nieuwe functie () {openbaar geheel getal toepassen (tekenreeksinvoer) {return input.length (); }}; Multimap-groepen = Multimaps.index (namen, func); assertThat (groups.get (3), containsInAnyOrder ("Tom")); assertThat (groups.get (4), containsInAnyOrder ("John", "Adam")); }

8. Conclusie

In deze korte tutorial hebben we de meest voorkomende en nuttige toepassingen van werken met kaarten met behulp van de Guava-bibliotheek.

De implementatie van al deze voorbeelden en codefragmenten is te vinden in mijn Guava GitHub-project - dit is een op Eclipse gebaseerd project, dus het zou gemakkelijk moeten kunnen worden geïmporteerd en uitgevoerd zoals het is.


$config[zx-auto] not found$config[zx-overlay] not found