Guava Collections kookboek

1. Inleiding

Dit kookboekartikel is georganiseerd in kleine en gerichte recepten en codefragmenten voor het gebruik van Guava-stijlcollecties.

Het formaat is dat van een groeiende lijst met codevoorbeelden zonder dat aanvullende uitleg nodig is - het is bedoeld om algemeen gebruik van de API gemakkelijk toegankelijk te houden tijdens de ontwikkeling.

2. De recepten

downcast een lijst naar een lijst

Opmerking: dit is een tijdelijke oplossing voor niet-covariante gegenereerde verzamelingen in Java

klasse CastFunction implementeert Functie {@Override public final T apply (final F from) {return (T) from; }} Lijst originalList = Lists.newArrayList (); List theList = Lists.transform (originalList, new CastFunction ());

eenvoudiger alternatief zonder Guava - met 2 cast-operaties

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

het toevoegen van een iterabel aan een verzameling

Iterable iter = Lists.newArrayList (); Verzamelaar = Lists.newArrayList (); Iterables.addAll (verzamelaar, iter);

controleer of de collectie element (en) bevat volgens een aangepaste vergelijkingsregel

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

alternatieve oplossing met behulp van zoeken

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

alternatieve oplossing alleen van toepassing op Sets

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

NoSuchElementException Aan Iterables. Vinden als er niets wordt gevonden

Iterable theCollection = Sets.newHashSet ("abcd", "efgh", "ijkl"); Predicaat inputOfLengthOne = nieuw Predicaat () {@Override public boolean apply (laatste String-invoer) {return input.length () == 1; }}; String gevonden = Iterables.find (theCollection, inputOfLengthOne);

- dit zal werpen de NoSuchElementException uitzondering:

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

oplossing: er is een overbelast vind methode die de standaard retourwaarde als argument aanneemt en kan worden aangeroepen met nul voor het gewenste gedrag:

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

verwijder alle null-waarden uit een verzameling

Lijstwaarden = Lists.newArrayList ("a", null, "b", "c"); Iterable withoutNulls = Iterables.filter (waarden, Predicates.notNull ());

maak direct een onveranderlijke lijst / set / kaart

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

maak een onveranderlijke lijst / set / kaart van een standaardcollectie

Lijst muttableList = Lists.newArrayList (); ImmutableList immutableList = ImmutableList.copyOf (muttableList); Stel muttableSet = Sets.newHashSet (); ImmutableSet immutableSet = ImmutableSet.copyOf (muttableSet); Kaart muttableMap = Maps.newHashMap (); ImmutableMap imuttableMap = ImmutableMap.copyOf (muttableMap);

alternatieve oplossing met bouwers

Lijst muttableList = Lists.newArrayList (); ImmutableList immutableList = ImmutableList. builder (). addAll (muttableList) .build (); Stel muttableSet = Sets.newHashSet (); ImmutableSet immutableSet = ImmutableSet. builder (). addAll (muttableSet) .build (); Kaart muttableMap = Maps.newHashMap (); ImmutableMap imuttableMap = ImmutableMap. builder (). putAll (muttableMap) .build ();

3. Meer Guava-kookboeken

Guava is een uitgebreide en fantastisch nuttige bibliotheek - hier zijn nog een paar API's die in kookboekvorm worden behandeld:

  • Guava Kookboek bestellen

  • Guava Functioneel kookboek

Genieten.

4. Vooruit gaan

Zoals ik in het begin al zei, experimenteer ik hiermee ander formaat - het kookboek - om te proberen eenvoudige algemene taken voor het gebruik van Guava Collections op één plek te verzamelen. De focus van dit formaat is eenvoud en snelheid, dus de meeste recepten hebben geen aanvullende uitleg anders dan het codevoorbeeld zelf.

Eindelijk - ik bekijk dit als een levend document - Ik blijf recepten en voorbeelden toevoegen als ik ze tegenkom. Voel je vrij om meer te geven in de reacties en ik zal proberen ze op te nemen in het kookboek.

De implementatie van al deze voorbeelden en codefragmenten is te vinden op GitHub - dit is een op Maven gebaseerd project, dus het zou gemakkelijk moeten kunnen worden geïmporteerd en uitgevoerd zoals het is.


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