Guava Samlinger Kogebog

1. Introduktion

Denne kogebogartikel er organiseret i små og fokuserede opskrifter og kodestykker til brug af Guava-stilkollektioner.

Formatet er det af en voksende liste med kodeeksempler uden yderligere forklaring nødvendig - det er meningen at holde almindelige anvendelser af API'en nemme at få adgang til under udvikling.

2. Opskrifterne

downcast en liste til en liste

Bemærk: dette er en løsning til ikke-covariant genererede samlinger i Java

klasse CastFunction implementerer Funktion {@Override offentlig endelig T gælder (endelig F fra) {retur (T) fra; }} Liste originalList = Lists.newArrayList (); Liste theList = Lists.transform (originalList, ny CastFunction ());

enklere alternativ uden Guava - involverer 2 rollebesætninger

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

tilføje en iterabel til en samling

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

kontrollere, om samlingen indeholder element (er) i henhold til en tilpasset matchingsregel

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

alternativ løsning ved hjælp af søgning

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

alternativ løsning, der kun gælder for sæt

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

NoSuchElementExceptionIterables.find når intet findes

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

- dette vil kaste det NoSuchElementException undtagelse:

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)

opløsning: der er en overbelastet finde metode der tager standard returværdien som et argument og kan kaldes med nul for den ønskede adfærd:

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

fjern alle nulværdier fra en samling

Listeværdier = Lists.newArrayList ("a", null, "b", "c"); Iterabel udenNulls = Iterables.filter (værdier, Predicates.notNull ());

Opret uforanderlig liste / sæt / kort 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");

Opret uforanderlig liste / sæt / kort fra en standardsamling

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 hjælp af bygherrer

List muttableList = Lists.newArrayList (); ImmutableList immutableList = ImmutableList. builder (). 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-kogebøger

Guava er et omfattende og fantastisk nyttigt bibliotek - her er et par flere API'er dækket i kogebogform:

  • Guava Bestilling Kogebog

  • Guava funktionel kogebog

God fornøjelse.

4. Gå fremad

Som jeg nævnte i starten, eksperimenterer jeg med dette andet format - kogebogen - at forsøge at samle enkle almindelige opgaver med at bruge Guava-samlinger på et enkelt sted. Fokus for dette format er enkelhed og hastighed, så de fleste opskrifter har ingen yderligere forklaring end selve kodeeksemplet.

Endelig - jeg ser på dette som et levende dokument - Jeg fortsætter med at tilføje opskrifter og eksempler, når jeg løber ind i dem. Du er velkommen til at give mere i kommentarerne, og jeg vil se på at integrere dem i kogebogen.

Implementeringen af ​​alle disse eksempler og kodestykker kan findes på GitHub - dette er et Maven-baseret projekt, så det skal være let at importere og køre som det er.