Livre de recettes des collections de goyave

1. Introduction

Cet article de livre de cuisine est organisé en petites recettes ciblées et en extraits de code pour l'utilisation des collections de style Guava.

Le format est celui d' une liste croissante d'exemples de code sans aucune explication supplémentaire nécessaire - il est destiné à faciliter l'accès aux utilisations courantes de l'API pendant le développement.

2. Les recettes

réduire une liste à une liste

- Remarque : il s'agit d'une solution de contournement pour les collections générées non covariantes en Java

class CastFunction implements Function { @Override public final T apply(final F from) { return (T) from; } } List originalList = Lists.newArrayList(); List theList = Lists.transform(originalList, new CastFunction());

alternative plus simple sans Guava - impliquant 2 opérations de fonte

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

ajouter un itérable à une collection

Iterable iter = Lists.newArrayList(); Collection collector = Lists.newArrayList(); Iterables.addAll(collector, iter);

vérifier si la collection contient des éléments selon une règle de correspondance personnalisée

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(contains);

solution alternative utilisant la recherche

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(contains);

solution alternative uniquement applicable aux ensembles

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

NoSuchElementException sur Iterables.find lorsque rien n'est trouvé

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

- cela va jeter la NoSuchElementException exception :

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

- solution : il existe une méthode de recherche surchargée qui prend la valeur de retour par défaut comme argument et peut être appelée avec null pour le comportement souhaité:

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

supprimer toutes les valeurs nulles d'une collection

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

créer directement une liste / un ensemble / une carte immuable

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

créer une liste / un ensemble / une carte immuable à partir d'une collection standard

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

solution alternative utilisant des constructeurs

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. Plus de livres de cuisine sur la goyave

Guava est une bibliothèque complète et incroyablement utile - voici quelques API supplémentaires couvertes sous forme de livre de cuisine:

  • Livre de recettes de commande de goyave

  • Livre de recettes fonctionnel de goyave

Prendre plaisir.

4. Aller de l'avant

Comme je l'ai mentionné au début, j'expérimente ce format différent - le livre de cuisine - pour essayer de rassembler des tâches courantes simples d'utilisation des collections de goyaves en un seul endroit. L'objectif de ce format est la simplicité et la rapidité, de sorte que la plupart des recettes n'ont aucune explication supplémentaire autre que l'exemple de code lui-même .

Enfin - je regarde cela comme un document vivant - je vais continuer à ajouter des recettes et des exemples au fur et à mesure que je les rencontre. N'hésitez pas à en fournir plus dans les commentaires et je chercherai à les incorporer dans le livre de cuisine.

L'implémentation de tous ces exemples et extraits de code peut être trouvée sur GitHub - il s'agit d'un projet basé sur Maven, il devrait donc être facile à importer et à exécuter tel quel.