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.