Guava Collections Kochbuch

Guava Collections Kochbuch

1. Einführung

Dieser Kochbuchartikel ist insmall and focused recipes and code snippets unterteilt, um Sammlungen im Guava-Stil zu verwenden.

Das Format ist das vona growing list of code examples, ohne dass eine 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 auf eine Liste herunterwerfen

-note: 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 aufIterables.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);

- Dies wirftthe 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: Es gibtan overloaded find method, die den Standardrückgabewert als Argument verwenden und mitnull für das gewünschte Verhalten aufgerufen werden können:

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:

Genießen.

4. Vorwärts gehen

Wie eingangs erwähnt, experimentiere ich mit diesendifferent format – the cookbook, 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 Rezepteno additional explanation other than the code example itself.

Schließlich - ich betrachte dies alsa living document - 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 Codefragmentecan be found over on GitHub - dies ist ein Maven-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein, wie es ist.