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
-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 extends Number>) 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.