Einführung in CollectionUtils
Eine weitere generische Dienstprogrammklasse, die viele nützliche Methoden enthält:
addAll(Collection<C>-Sammlung, C...Elemente) | Fügt alle Elemente des Arrays C zur Sammlung hinzu |
addIgnoreNull(Collection<T>-Sammlung, T-Objekt) | Fügt ein Element hinzu, wenn es nicht null ist |
enthältAlle(Collection<?> coll1, Collection<?> coll2) | Überprüft, ob Sammlung1 alle Elemente von Sammlung2 enthält |
enthältAny(Collection<?> coll1, Collection<?> coll2) | Überprüft, ob Sammlung1 mindestens ein Element aus Sammlung2 enthält |
countMatches(Iterable<C> input, Predicate<? super C> predicate) | Zählt, wie viele Elemente in einer Sammlung eine Prädikatregel erfüllen |
Disjunktion(Iterable<? erweitert O> a, Iterable<? erweitert O> b) | Gibt Objekte zurück, die nur in einer Sammlung enthalten sind, jedoch nicht in beiden |
Schnittpunkt(Iterable<? erweitert O> a, Iterable<? erweitert O> b) | Gibt eine Sammlung von Objekten zurück, die gleichzeitig Teil beider Sammlungen sind |
Union(Iterable<? erweitert O> a, Iterable<? erweitert O> b) | Gibt eine Sammlung von Objekten zurück, die Teil mindestens einer Sammlung sind |
emptyCollection() | Gibt eine spezielle leere Sammlung zurück |
emptyIfNull(Collection<T>-Sammlung) | Gibt eine leere Sammlung zurück, wenn Sammlung == null |
existiert(Iterable<C>-Eingabe, Prädikat<? super C>-Prädikat) | Überprüft, ob es in der Sammlung ein Element gibt, das die Prädikatsregel erfüllt |
extractSingleton(Collection<E>-Sammlung) | Gibt das einzige Element der Sammlung zurück |
filter(Iterable<T>-Sammlung, Prädikat<? super T>-Prädikat) | Filtert die Elemente einer Sammlung |
find(Iterable<T>-Sammlung, Prädikat<? super T>-Prädikat) | Auf der Suche nach Elementen einer Sammlung |
isEmpty(Collection<?> coll) | Überprüft, ob die Sammlung leer ist |
isEqualCollection(Collection<?> a, Collection<?> b) | Vergleicht Sammlungen |
isFull(Collection<? erweitert Object> coll) | Prüft, ob ein Element noch zur Sammlung hinzugefügt werden kann |
isNotEmpty(Collection<?> coll) | Überprüfen Sie, ob die Sammlung nicht leer ist |
isSubCollection(Collection<?> a, Collection<?> b) | Überprüft, ob Sammlung B in Sammlung A ist |
matchesAll(Iterable<C> input, Predicate<? super C> predicate) | Überprüft, ob alle Elemente einer Sammlung eine Prädikatregel erfüllen |
RemoveAll(Collection<E> Sammlung, Sammlung<?> Entfernen) | Entfernt alle Elemente der Sammlung |
keepAll(Collection<C> Sammlung, Sammlung<?> Retain) | Gibt eine Sammlung zurück, die alle Elemente der Sammlung enthält, die auch in Retain enthalten sind |
reverseArray(Object[]-Array) | Kehrt ein Array rückwärts um |
unmodifiableCollection(Collection<? erweitert die C>-Sammlung) | Gibt einen Wrapper über die Sammlung zurück. Jeder Versuch, die Sammlung zu ändern, löst eine Ausnahme aus. |
Schauen wir uns einige Methoden an.
Möglichkeiten, zu überprüfen, ob eine Sammlung leer ist
So einfach können Sie feststellen, ob eine Sammlung leer ist:
CollectionUtils.isEmpty(null); // true
CollectionUtils.isEmpty(new LinkedList<>()); // true
CollectionUtils.isEmpty(Collections.singleton(new int[]{2, 1})); // false
Genauso einfach lässt sich überprüfen, ob eine Sammlung nicht leer ist:
CollectionUtils.isNotEmpty(null); // false
CollectionUtils.isNotEmpty(new LinkedList<>()); // false
CollectionUtils.isNotEmpty(Collections.singleton(new int[]{2, 1})); // true
Beispiele:
User ivan = new User("Ivan", "ivan@email.com");
User petr = new User("Petr", "petr@email.com");
List<User> users = new ArrayList<>();
System.out.println(CollectionUtils.isEmpty(users)); // true
System.out.println(CollectionUtils.isNotEmpty(users)); // false
users.add(ivan);
users.add(petr);
System.out.println(CollectionUtils.isEmpty(users)); // false
System.out.println(CollectionUtils.isNotEmpty(users)); // true
users = null;
System.out.println(CollectionUtils.isEmpty(users)); // true
System.out.println(CollectionUtils.isNotEmpty(users)); // false
Ein Leitfaden für Apache Commons Collections CollectionUtils
Operationen an Mengen
Wenn Sie sich mit der Mengenlehre befassen mussten, wissen Sie, dass es vier Grundoperationen für Mengen gibt: Vereinigung, Schnittmenge, Differenz und Disjunktion.
Für diese Vorgänge verfügt die CollectionUtils- Klasse über vier Methoden:
- Union()
- Überschneidung()
- Disjunktion()
- subtrahieren()
Nachfolgend einige einfache Beispiele:
Einen Verband
List<String> firstList = Arrays.asList("1", "2", "3", "4", "5", "6");
List<String> secondList = Arrays.asList("2", "3", "6", "7", "8", "9");
//combine two sets
Collection<String> result = CollectionUtils.union(firstList, secondList);
System.out.println(ArrayUtils.toString(result)); //[1, 2, 3, 4, 5, 6, 7, 8, 9]
Überschneidung
List<String> firstList = Arrays.asList("A", "B", "C", "D", "E", "F");
List<String> secondList = Arrays.asList("B", "D", "F", "G", "H", "K");
//intersections of two sets
Collection<String> result = CollectionUtils.intersection(firstList, secondList);
System.out.println(ArrayUtils.toString(result)); //[B, D, F]
Disjunktion
List<String> firstList = Arrays.asList("1", "2", "3", "4", "5", "6");
List<String> secondList = Arrays.asList("2", "3", "6", "7", "8", "9");
//disjunction
Collection<String> result = CollectionUtils.disjunction(firstList, secondList);
System.out.println(ArrayUtils.toString(result)); //[1, 4, 5, 7, 8, 9]
Differenz (Abzug)
List<String> firstList = Arrays.asList("1", "2", "3", "4", "5", "6");
List<String> secondList = Arrays.asList("2", "3", "6", "7", "8", "9");
//difference
Collection<String> result = CollectionUtils.subtract(firstList, secondList);
System.out.println(ArrayUtils.toString(result)); // [1, 4, 5]
Fortsetzung der Operationen an Sets
Dieses Beispiel zeigt, wie Sie die oben genannten vier Methoden verwenden, um mit zwei Sammlungen zu arbeiten:
List<Integer> firstList = Arrays.asList(1, 2, 3, 3, 4, 5);
List<Integer> secondList = Arrays.asList(3, 4, 4, 5, 6, 7);
Collection<Integer> union = CollectionUtils.union(firstList, secondList); // An association
Collection<Integer> intersection = CollectionUtils.intersection(firstList, secondList); // Intersection
Collection<Integer> disjunction = CollectionUtils.disjunction(firstList, secondList); // disjunction
Collection<Integer> subtract = CollectionUtils.subtract(firstList, secondList); // Difference
System.out.println("firstList: " + ArrayUtils.toString(firstList.toArray()));
System.out.println("secondList: " + ArrayUtils.toString(secondList.toArray()));
System.out.println("An association: " + ArrayUtils.toString(union.toArray()));
System.out.println("Intersection: " + ArrayUtils.toString(intersection.toArray()));
System.out.println("Disjunction: " + ArrayUtils.toString(disjunction.toArray()));
System.out.println("Difference: " + ArrayUtils.toString(subtract.toArray()));
Unser Ergebnis:
firstList: {1,2,3,3,4,5}
secondList: {3,4,4,5,6,7}
An association: {1,2,3,3,4,4,5,6,7}
intersection: {3,4,5}
Disjunction: {1,2,3,4,6,7}
Difference: {1,2,3}
Sie können diese Methoden selbst ausprobieren.
unmodifiableCollection() Methode
Manchmal müssen wir Schnittstellenmethoden implementieren, die Sammlungen der internen Daten unserer Objekte zurückgeben müssen. Und da die Daten intern sind, möchten wir nicht, dass jemand sie irgendwo ändert.
Oder wir haben irgendwo eine Sammlung, die nicht geändert werden muss, sind aber gezwungen, sie an eine Methode eines Drittanbieters weiterzugeben. Wo ist die Garantie, dass er es nicht ändern wird?
Um ruhig zu schlafen, kann die Sammlung in einen speziellen Wrapper verpackt werden, der beim Versuch, die Sammlung zu ändern, eine Ausnahme auslöst.
Beispiel:
Collection<String> firstCollection = new ArrayList<String>();
Collection<String> secondCollection = Collections.unmodifiableCollection(firstCollection);
firstCollection.add("hello");
firstCollection.add("from");
firstCollection.add("codeGym");
//secondCollection.add("have a error");
System.out.println(secondCollection); //[hello, from, codeGym]
Die Methode Collections.unmodifiableCollection() gibt einen Wrapper über die ihr übergebene Sammlung zurück. Wenn Sie die Methoden get() und size() aufrufen , funktioniert alles. Wenn Sie jedoch die Methoden add() , set() , remove() aufrufen , erhalten Sie eine Ausnahme.
java.lang.UnsupportedOperationException
at org.apache.commons.collections.collection.UnmodifiableCollection.add(UnmodifiableCollection.java:75)
Tatsächlich ist die Methode bereits als veraltet markiert und es wird empfohlen, stattdessen Collections.unmodifiableCollection(Collection<? erweitert T> c) zu verwenden .
Collection<String> firstCollection = new ArrayList<String>();
Collection<String> secondCollection =
Collections.unmodifiableCollection(firstCollection);
GO TO FULL VERSION