Kuharica zbirki Guava

1. Uvod

Ovaj je članak o kuharici organiziran u mali i fokusirani recepti i isječci koda za korištenje kolekcija u stilu Guava.

Format je rastući popis primjera koda bez potrebnog dodatnog objašnjenja - namijenjen je lakom pristupu uobičajenim oblicima API-ja tijekom razvoja.

2. Recepti

spustio Popis na Popis

Bilješka: ovo je rješenje za nekovarijantno generirane zbirke u Javi

klasa CastFunction implementira funkciju {@Override public final T apply (final F from) {return (T) from; }} Popis originalList = Lists.newArrayList (); Popis theList = Lists.transform (originalList, nova CastFunction ());

jednostavnija alternativa bez Guave - uključuje 2 operacije lijevanja

Popis originalList = Lists.newArrayList (); Popis theList = (Popis) (Popis) originalList;

dodavanje iterablea u zbirku

Iterable iter = Lists.newArrayList (); Kolekcionar kolekcije = Lists.newArrayList (); Iterables.addAll (sakupljač, iter);

provjerite sadrži li zbirka elemente prema prilagođenom pravilu podudaranja

Iterable theCollection = Lists.newArrayList ("a", "bc", "def"); boolean sadrži = Iterables.any (theCollection, novi Predikat () {@Preuzmi javnu logičku primjenu (konačni unos niza) {return input.length () == 1;}}); assertTrue (sadrži);

alternativno rješenje pomoću pretraživanja

Iterable theCollection = Sets.newHashSet ("a", "bc", "def"); boolean sadrži = Iterables.find (theCollection, novi Predikat () {@Override javna logička primjena (konačni unos niza) {return input.length () == 1;}})! = null; assertTrue (sadrži);

alternativno rješenje primjenjivo samo na Setove

Postavite theCollection = Sets.newHashSet ("a", "bc", "def"); boolean sadrži =! Sets.filter (theCollection, novi Predikat () {@Override javna logička primjena (konačni unos niza) {return input.length () == 1;}}). isEmpty (); assertTrue (sadrži);

NoSuchElementException na Interables.nađi kad se ništa ne nađe

Iterable theCollection = Sets.newHashSet ("abcd", "efgh", "ijkl"); Predikat inputOfLengthOne = novi predikat () {@Override javna logička primjena (konačni unos niza) {return input.length () == 1; }}; Pronađen niz = Iterables.find (theCollection, inputOfLengthOne);

- ovo će baciti the NoSuchElementException iznimka:

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

riješenje: tamo je preopterećen pronaći metoda koja uzima zadanu povratnu vrijednost kao argument i može se pozvati s null za željeno ponašanje:

Pronađen niz = Iterables.find (theCollection, inputOfLengthOne, null);

ukloni sve null vrijednosti iz zbirke

Vrijednosti popisa = Lists.newArrayList ("a", null, "b", "c"); Iterable withoutNulls = Iterables.filter (vrijednosti, predikati.notNull ());

izravno izradite nepromjenjivi Popis / Postavljanje / Mapu

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

stvoriti nepromjenjivi Popis / Set / Mapu iz standardne kolekcije

Popis muttableList = Lists.newArrayList (); ImmutableList immutableList = ImmutableList.copyOf (muttableList); Postavi muttableSet = Sets.newHashSet (); ImmutableSet immutableSet = ImmutableSet.copyOf (muttableSet); Karta muttableMap = Maps.newHashMap (); ImmutableMap imuttableMap = ImmutableMap.copyOf (muttableMap);

alternativno rješenje pomoću graditelja

Popis muttableList = Lists.newArrayList (); ImmutableList immutableList = ImmutableList. graditelj (). addAll (muttableList) .build (); Postavi muttableSet = Sets.newHashSet (); ImmutableSet immutableSet = ImmutableSet. graditelj (). addAll (muttableSet) .build (); Karta muttableMap = Maps.newHashMap (); ImmutableMap imuttableMap = ImmutableMap. graditelj (). putAll (muttableMap) .build ();

3. Više Guava kuharica

Guava je sveobuhvatna i fantastično korisna knjižnica - evo još nekoliko API-ja obuhvaćenih kuharicom:

  • Kuharica za naručivanje Guave

  • Funkcionalna kuharica Guava

Uživati.

4. Naprijed

Kao što sam spomenuo na početku, eksperimentiram s tim drugačiji format - kuharica - pokušati skupiti jednostavne uobičajene zadatke korištenja kolekcija Guava na jednom mjestu. Fokus ovog formata je jednostavnost i brzina, tako da većina recepata ima nikakvo dodatno objašnjenje osim samog primjera koda.

Napokon - na ovo gledam kao na živi dokument - Nastavit ću dodavati recepte i primjere dok naletim na njih. Slobodno navedite više u komentarima, a ja ću ih uklopiti u kuharicu.

Implementacija svih ovih primjera i isječaka koda možete pronaći na GitHubu - ovo je projekt zasnovan na Mavenu, pa bi ga trebalo biti lako uvesti i pokrenuti kakav jest.