Guava Collections Cookbook

1. Introduksjon

Denne kokebokartikkelen er organisert i små og fokuserte oppskrifter og kodebiter for bruk av Guava-stilkolleksjoner.

Formatet er det av en voksende liste over kodeeksempler uten ytterligere forklaring nødvendig - det er ment å holde vanlige bruksområder for API lett tilgjengelige under utvikling.

2. Oppskriftene

nedkast en liste til en liste

Merk: dette er en løsning for ikke-kovariant genererte samlinger i Java

klasse CastFunction implementerer Funksjon {@Override offentlig finale T gjelder (endelig F fra) {retur (T) fra; }} Liste originalList = Lists.newArrayList (); Liste theList = Lists.transform (originalList, ny CastFunction ());

enklere alternativ uten Guava - med to rollebesetninger

Liste originalList = Lists.newArrayList (); List theList = (List) (List) originalList;

legge til en iterabel i en samling

Iterabel iter = Lists.newArrayList (); Samlersamler = Lists.newArrayList (); Iterables.addAll (samler, iter);

sjekk om samlingen inneholder element (er) i henhold til en tilpasset samsvarende regel

Iterabel theCollection = Lists.newArrayList ("a", "bc", "def"); boolsk inneholder = Iterables.any (theCollection, new Predicate () {@Override public boolean apply (final String input) {return input.length () == 1;}}); assertTrue (inneholder);

alternativ løsning ved hjelp av søk

Iterabel theCollection = Sets.newHashSet ("a", "bc", "def"); boolsk inneholder = Iterables.find (theCollection, new Predicate () {@Override public boolean apply (final String input) {return input.length () == 1;}})! = null; assertTrue (inneholder);

alternativ løsning bare anvendelig for sett

Sett theCollection = Sets.newHashSet ("a", "bc", "def"); boolsk inneholder =! Sets.filter (theCollection, new Predicate () {@Override public boolean apply (final String input) {return input.length () == 1;}}). isEmpty (); assertTrue (inneholder);

NoSuchElementExceptionIterables.find når ingenting blir funnet

Iterabel theCollection = Sets.newHashSet ("abcd", "efgh", "ijkl"); Predicate inputOfLengthOne = new Predicate () {@Override public boolean apply (final String input) {return input.length () == 1; }}; Streng funnet = Iterables.find (theCollection, inputOfLengthOne);

- dette vil kaste de NoSuchElementException unntak:

java.util.NoSuchElementException på com.google.common.collect.AbstractIterator.next (AbstractIterator.java:154) på ​​com.google.common.collect.Iterators.find (Iterators.java:712) på com.google.common. collect.Iterables.find (Iterables.java:643)

løsning: det er en overbelastet finne metode som tar standard returverdi som argument og kan kalles med null for ønsket oppførsel:

Streng funnet = Iterables.find (theCollection, inputOfLengthOne, null);

fjern alle nullverdier fra en samling

Listeverdier = Lists.newArrayList ("a", null, "b", "c"); Iterabel utenNulls = Iterables.filter (verdier, Predicates.notNull ());

lage uforanderlig liste / sett / kart direkte

ImmutableList immutableList = ImmutableList.of ("a", "b", "c"); ImmutableSet immutableSet = ImmutableSet.of ("a", "b", "c"); ImmutableMap imuttableMap = ImmutableMap.of ("k1", "v1", "k2", "v2", "k3", "v3");

lage uforanderlig liste / sett / kart fra en standard samling

List muttableList = Lists.newArrayList (); ImmutableList immutableList = ImmutableList.copyOf (muttableList); Set muttableSet = Sets.newHashSet (); ImmutableSet immutableSet = ImmutableSet.copyOf (muttableSet); Map muttableMap = Maps.newHashMap (); ImmutableMap imuttableMap = ImmutableMap.copyOf (muttableMap);

alternativ løsning ved hjelp av byggherrer

List muttableList = Lists.newArrayList (); ImmutableList immutableList = ImmutableList. byggmester (). addAll (muttableList) .build (); Set muttableSet = Sets.newHashSet (); ImmutableSet immutableSet = ImmutableSet. builder (). addAll (muttableSet) .build (); Map muttableMap = Maps.newHashMap (); ImmutableMap imuttableMap = ImmutableMap. builder (). putAll (muttableMap) .build ();

3. Flere Guava kokebøker

Guava er et omfattende og fantastisk nyttig bibliotek - her er noen flere API-er dekket i kokebokform:

  • Guava bestilling av kokebok

  • Guava funksjonell kokebok

Nyt.

4. Går fremover

Som jeg nevnte i begynnelsen, eksperimenterer jeg med dette annet format - kokeboken - å prøve å samle enkle vanlige oppgaver for å bruke Guava Collections på ett sted. Fokuset i dette formatet er enkelhet og hastighet, så de fleste oppskrifter har ingen ytterligere forklaring enn selve kodeeksemplet.

Til slutt - jeg ser på dette som et levende dokument - Jeg kommer til å fortsette å legge til oppskrifter og eksempler når jeg støter på dem. Gi gjerne mer i kommentarene, så ser jeg ut til å innlemme dem i kokeboken.

Implementeringen av alle disse eksemplene og kodebiter kan du finne på GitHub - dette er et Maven-basert prosjekt, så det skal være enkelt å importere og kjøre som det er.


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