Guava gyűjtemények szakácskönyve

1. Bemutatkozás

Ez a szakácskönyv-cikk a következőkre van rendezve apró és célzott receptek és kódrészletek a guava stílusú gyűjtemények használatához.

A formátum a a kódpéldák egyre növekvő listája anélkül, hogy további magyarázatra lenne szükség - célja, hogy az API közös használatát könnyen elérhesse a fejlesztés során.

2. A receptek

egy listát lecsökkent egy listára

jegyzet: ez a megoldás a nem kovariáns generált gyűjtemények számára a Java-ban

osztály CastFunction megvalósítja a Function {@Orride public final T apply (final F from) {return (T) from; }} List originalList = Lists.newArrayList (); Sorolja fel a theList = Lists.transform (originalList, új CastFunction ());

egyszerűbb alternatíva Guava nélkül - 2 szereplőgárdával

List originalList = Lists.newArrayList (); Sorolja fel aList = (Lista) (Lista) eredetiListát;

iterálást adva egy gyűjteményhez

Iterálható iter = Lists.newArrayList (); Gyűjteménygyűjtő = Lists.newArrayList (); Iterables.addAll (gyűjtő, iter);

ellenőrizze, hogy a gyűjtemény tartalmaz-e elemeket egy egyedi egyezési szabály szerint

Iterable theCollection = Lists.newArrayList ("a", "bc", "def"); a logikai elem = Iterables.any (theCollection, new Predicate () {@Orride public boolean Apply (final String input) {return input.length () == 1;}}); assertTrue (tartalmazza);

alternatív megoldás a keresés segítségével

Iterable theCollection = Sets.newHashSet ("a", "bc", "def"); logikai érték tartalmazza az = Iterables.find (theCollection, new Predicate () {@Orride public boolean Apply (final String input) {return input.length () == 1;}})! = null; assertTrue (tartalmazza);

alternatív megoldás csak a Készletekre vonatkozik

Állítsa be a TheCollection = Sets.newHashSet ("a", "bc", "def") beállítást; a Boolean =! Sets.filter (theCollection, new Predicate () {@Orride public Boolean Apply (final String input) {return input.length () == 1;}}). isEmpty (); assertTrue (tartalmazza);

NoSuchElementException tovább Iterable.find amikor semmit sem találnak

Iterable theCollection = Sets.newHashSet ("abcd", "efgh", "ijkl"); Predicate inputOfLengthOne = new Predicate () {@Orride public boolean Apply (utolsó karakterlánc bemenet) {return input.length () == 1; }}; String found = Iterables.find (theCollection, inputOfLengthOne);

- ez dobni fog a NoSuchElementException kivétel:

java.util.NoSuchElementException a com.google.common.collect.AbstractIterator.next (AbstractIterator.java:154) címen com.google.common.collect.Iterators.find (Iterators.java:712) a com.google.common oldalon. gyűjt.Iterables.find (Iterables.java:643)

megoldás: van egy túlterhelt megtalálja módszer amely az alapértelmezett visszatérési értéket veszi fel argumentumként, és ezzel meghívható nulla a kívánt viselkedéshez:

String found = Iterables.find (theCollection, inputOfLengthOne, null);

távolítsa el az összes null értéket a gyűjteményből

Listaértékek = Lists.newArrayList ("a", null, "b", "c"); Iterable withoutNulls = Iterables.filter (értékek, Predicates.notNull ());

közvetlenül hozhat létre változhatatlan listát / halmazt / térképet

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

hozzon létre változhatatlan listát / halmazt / térképet egy szokásos gyűjteményből

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

alternatív megoldás építők felhasználásával

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

3. További guavai szakácskönyvek

A Guava egy átfogó és fantasztikusan hasznos könyvtár - íme néhány további API a szakácskönyv formában:

  • Guava rendelési szakácskönyv

  • Guava funkcionális szakácskönyv

Élvezd.

4. Előre haladás

Mint már az elején említettem, ezzel kísérletezem különböző formátum - a szakácskönyv - megpróbálni egyetlen helyen összegyűjteni a Guava Gyűjtemények használatának egyszerű közös feladatait. Ennek a formátumnak a középpontjában az egyszerűség és a gyorsaság áll, így a legtöbb recept megvan nincs további magyarázat, csak maga a kódpélda.

Végül - úgy nézem ezt élő dokumentum - Folyamatosan hozzáadom a recepteket és a példákat, amikor összefutok velük. Nyugodtan adjon meg többet a megjegyzésekben, és megpróbálom beépíteni őket a szakácskönyvbe.

Mindezen példák és kódrészletek megvalósítása megtalálható a GitHubon - ez egy Maven-alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.


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