Guava - Kart

1. Oversikt

I denne veiledningen illustrerer vi de mest nyttige måtene du kan utnytte Guava til å jobbe med Java Maps.

La oss starte veldig enkelt og lage en HashMaputen ny bruker Guava:

Kart aNewMap = Maps.newHashMap ();

2. ImmutableMap

Neste - la oss se hvordan du lager ImmutableMap ved hjelp av Guava:

@Test offentlig ugyldig nårCreatingImmutableMap_thenCorrect () {Map lønn = ImmutableMap. builder () .put ("John", 1000) .put ("Jane", 1500) .put ("Adam", 2000) .put ("Tom", 2000) .build (); assertEquals (1000, lønn.get ("John"). intValue ()); assertEquals (2000, lønn.get ("Tom"). intValue ()); }

3. SortedMap

La oss ta en titt på å lage og jobbe med en SortedMap.

I det følgende eksemplet lager vi et sortert kart ved hjelp av den tilsvarende Guava-byggeren:

@Test offentlig ugyldig nårUsingSortedMap_thenKeysAreSorted () {ImmutableSortedMap lønn = ny ImmutableSortedMap .Builder (Ordering.natural ()) .put ("John", 1000) .put ("Jane", 1500) .put ("Adam", 2000). put ("Tom", 2000) .build (); assertEquals ("Adam", lønn.firstKey ()); assertEquals (2000, lønn.lastEntry (). getValue (). intValue ()); }

4. BiMap

Neste - la oss diskutere hvordan du bruker BiMap. Vi kan bruke BiMap for å kartlegge nøkler tilbake til verdier, da det sørger for at verdiene er unike.

I det følgende eksemplet - lager vi en BiMap og vi får det omvendt():

@Test offentlig ugyldig nårCreateBiMap_thenCreated () {BiMap ord = HashBiMap.create (); words.put ("Først", 1); words.put ("Second", 2); words.put ("Tredje", 3); assertEquals (2, words.get ("Second"). intValue ()); assertEquals ("Third", words.inverse (). get (3)); }

5. Multikart

Nå - la oss ta en titt på Multikart.

Vi kan bruke Multikart til knytte hver nøkkel til flere verdier som i følgende eksempel:

@Test offentlig ugyldig nårCreateMultimap_thenCreated () {Multimap multimap = ArrayListMultimap.create (); multimap.put ("frukt", "eple"); multimap.put ("frukt", "banan"); multimap.put ("pet", "cat"); multimap.put ("pet", "dog"); assertThat (multimap.get ("frukt"), inneholderInAnyOrder ("eple", "banan")); assertThat (multimap.get ("pet"), inneholderInAnyOrder ("katt", "hund")); }

5. Bord

La oss nå ta en titt på Guava Bord; vi bruker Bord hvis vi trenger det mer enn en nøkkel for å indeksere en verdi.

I det følgende eksemplet - vi skal bruke en tabell for å lagre avstandene mellom byer:

@Test offentlig ugyldig nårCreatingTable_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 (), inneholderInAnyOrder ("Paris", "New York", "Los Angeles")); assertThat (distance.rowKeySet (), inneholderInAnyOrder ("London", "New York")); }

Vi kan også bruke Tables.transpose () for å snu rad- og kolonnetastene som i følgende eksempel:

@Test offentlig ugyldig nårTransposingTable_thenCorrect () {Tabellavstand = HashBasedTable.create (); distance.put ("London", "Paris", 340); distance.put ("New York", "Los Angeles", 3940); distance.put ("London", "New York", 5576); Tabell transponert = Tabeller.transponere (avstand); assertThat (transposed.rowKeySet (), inneholderInAnyOrder ("Paris", "New York", "Los Angeles")); assertThat (transposed.columnKeySet (), inneholderInAnyOrder ("London", "New York")); }

6. ClassToInstanceMap

Neste - La oss ta en titt på ClassToInstanceMap. Vi kan bruke ClassToInstanceMap hvis vi vil at objektets klasse skal være nøkkelen som i følgende eksempel:

@Test offentlig ugyldig nårCreatingClassToInstanceMap_thenCorrect () {ClassToInstanceMap numbers = MutableClassToInstanceMap.create (); numbers.putInstance (Heltall.klasse, 1); numbers.putInstance (Double.class, 1.5); assertEquals (1, numbers.get (Integer.class)); assertEquals (1.5, numbers.get (Double.class)); }

7. Gruppe Liste Ved hjelp av Multikart

Neste - la oss se hvordan du grupperer a Liste ved hjelp av Multikart. I det følgende eksemplet - grupperer vi a Liste av navn etter lengde ved hjelp av Multimaps.index ():

@Test offentlig ugyldig nårGroupingListsUsingMultimap_thenGrouped () {List names = Lists.newArrayList ("John", "Adam", "Tom"); Funksjon func = ny funksjon () {public Integer apply (String input) {return input.length (); }}; Multimap-grupper = Multimaps.index (navn, funksjon); assertThat (group.get (3), inneholderInAnyOrder ("Tom")); assertThat (group.get (4), inneholderInAnyOrder ("John", "Adam")); }

8. Konklusjon

I denne raske opplæringen diskuterte vi de vanligste og mest nyttige bruksområdene for jobbe med Maps ved hjelp av Guava-biblioteket.

Implementeringen av alle disse eksemplene og kodebiter finner du i mitt Guava GitHub-prosjekt - dette er et formørkelsesbasert prosjekt, så det skal være enkelt å importere og kjøre som det er.


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