Kuchárska kniha zbierok Guava

1. Úvod

Tento článok o kuchárskej knihe je usporiadaný do malé a sústredené recepty a úryvky kódu na používanie zbierok v štýle Guava.

Formát je z rastúci zoznam príkladov kódov nie je potrebné žiadne ďalšie vysvetlenie - má to umožniť ľahký prístup k bežným používaniu API počas vývoja.

2. Recepty

zostupne Zoznam do zoznamu

Poznámka: toto je riešenie pre nekovariantné generované kolekcie v Jave

trieda CastFunction implementuje funkciu {@Override public final T apply (final F from) {return (T) from; }} Zoznam originalList = Lists.newArrayList (); Zoznam theList = Lists.transform (originalList, new CastFunction ());

jednoduchšia alternatíva bez Guava - zahŕňajúca 2 cast operácie

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

pridanie iterácie do zbierky

Iterovateľný iter = Lists.newArrayList (); Zberač zbierok = Lists.newArrayList (); Iterables.addAll (kolektor, iter);

podľa vlastného pravidla zhody skontrolujte, či kolekcia obsahuje prvky

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

alternatívne riešenie pomocou vyhľadávania

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

alternatívne riešenie použiteľné iba pre súpravy

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

NoSuchElementException na Iterables.find keď sa nič nenájde

Iterable theCollection = Sets.newHashSet ("abcd", "efgh", "ijkl"); Predicate inputOfLengthOne = new Predicate () {@Override public boolean apply (final String input) {return input.length () == 1; }}; Nájdený reťazec = Iterables.find (theCollection, inputOfLengthOne);

- toto hodí the NoSuchElementException výnimkou:

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

Riešenie: existuje preťažený Nájsť metóda , ktorý berie ako argument predvolenú návratovú hodnotu a dá sa s ním vyvolať nulový pre požadované správanie:

Nájdený reťazec = Iterables.find (theCollection, inputOfLengthOne, null);

odstrániť všetky nulové hodnoty zo zbierky

Zoznam hodnôt = Lists.newArrayList ("a", null, "b", "c"); Iterable withoutNulls = Iterables.filter (values, Predicates.notNull ());

vytvorte priamo nemenný zoznam / zostavu / 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");

vytvorte nemenný Zoznam / Súbor / Mapu zo štandardnej zbierky

Zoznam 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);

alternatívne riešenie pomocou staviteľov

Zoznam 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. Viac kuchárskych kníh Guava

Guava je komplexná a fantasticky užitočná knižnica - tu je niekoľko ďalších rozhraní API zahrnutých vo forme kuchárskej knihy:

  • Objednávka kuchárskej knihy Guava

  • Guava funkčná kuchárska kniha

Užite si to.

4. Ideme vpred

Ako som už spomenul na začiatku, s tým experimentujem iný formát - kuchárska kniha - pokúsiť sa zhromaždiť jednoduché bežné úlohy používania zbierok Guava na jednom mieste. Tento formát sa zameriava na jednoduchosť a rýchlosť, tak to má väčšina receptov žiadne ďalšie vysvetlenie okrem samotného príkladu kódu.

Nakoniec - pozerám sa na to ako živý dokument - Budem stále pridávať recepty a príklady, keď na ne narazím. Pokojne uveďte viac v komentároch a budem sa usilovať o ich začlenenie do kuchárskej knihy.

Implementácia všetkých týchto príkladov a útržkov kódu nájdete na GitHub - toto je projekt založený na Maven, takže by malo byť ľahké ho importovať a spustiť tak, ako je.


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