Guavensammlungen Kochbuch

1. Einleitung

Dieser Kochbuchartikel ist in kleine und fokussierte Rezepte und Codefragmente für die Verwendung von Sammlungen im Guava-Stil unterteilt.

Das Format ist das einer wachsenden Liste von Codebeispielen, für die keine zusätzliche Erklärung erforderlich ist. Es soll die allgemeine Verwendung der API während der Entwicklung leicht zugänglich machen.

2. Die Rezepte

eine Liste in eine Liste umwandeln

- Hinweis : Dies ist eine Problemumgehung für nicht kovariante generierte Sammlungen in 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());

einfachere Alternative ohne Guave - mit 2 Zauberoperationen

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

Hinzufügen einer iterablen Datei zu einer Sammlung

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

Überprüfen Sie, ob die Sammlung Elemente gemäß einer benutzerdefinierten Übereinstimmungsregel enthält

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

alternative Lösung mit Suche

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

alternative Lösung nur für Sets

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 auf Iterables.find, wenn nichts gefunden wird

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

- Dadurch wird die NoSuchElementException- Ausnahme ausgelöst :

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)

- Lösung : Es ist eine überladene Fund Methode , die den Standardrückgabewert als Argument und kann mit aufgerufen werden null für das gewünschte Verhalten:

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

Entfernen Sie alle Nullwerte aus einer Sammlung

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

Unveränderliche Liste / Set / Map direkt erstellen

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

Erstellen Sie eine unveränderliche Liste / Menge / Karte aus einer Standardsammlung

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

alternative Lösung mit Buildern

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. Weitere Guaven-Kochbücher

Guava ist eine umfassende und fantastisch nützliche Bibliothek - hier sind einige weitere APIs, die in Kochbuchform behandelt werden:

  • Guave Bestellkochbuch

  • Guave Funktionskochbuch

Genießen.

4. Vorwärts gehen

Wie eingangs erwähnt, experimentiere ich mit diesem anderen Format - dem Kochbuch -, um zu versuchen, einfache allgemeine Aufgaben für die Verwendung von Guavensammlungen an einem einzigen Ort zu sammeln. Der Fokus dieses Formats liegt auf Einfachheit und Geschwindigkeit, daher haben die meisten Rezepte keine zusätzliche Erklärung außer dem Codebeispiel selbst .

Schließlich - ich betrachte dies als lebendiges Dokument - werde ich weiterhin Rezepte und Beispiele hinzufügen, wenn ich auf sie stoße. Fühlen Sie sich frei, mehr in den Kommentaren anzugeben, und ich werde versuchen, sie in das Kochbuch aufzunehmen.

Die Implementierung all dieser Beispiele und Codefragmente finden Sie auf GitHub - dies ist ein Maven-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein, wie es ist.