Bibliothek-Methode, um partition einer Sammlung, die ein Prädikat
Habe ich eine Sammlung von Objekten, möchte ich eine partition in zwei Sammlungen, von denen geht ein Prädikat, und von denen scheitert ein Prädikat. Ich hatte gehofft, es wäre ein Guave Methode, dies zu tun, aber die nächsten kommen Sie ist filter, die nicht geben Sie mir die andere Sammlung.
Ich würde das Bild die Signatur der Methode, wäre so etwas wie dieses:
public static <E> Pair<Collection<E>, Collection<E>> partition(Collection<E> source, Predicate<? super E> predicate)
Ich weiß, das ist super schnell zum code selbst, aber ich bin auf der Suche nach einer vorhandenen Bibliothek Methode, die das tut, was ich will.
- Beachten Sie, dass im Falle von beschränkten Satz von im Voraus bekannt partiotion Schlüssel kann es viel effizienter GC-wise nur zum Durchlaufen der collection einmal mehr für jede partition Taste überspringen alle anderen-wichtige Elemente, die bei jeder iteration.
- Anderen beiden GC-freundlich und gekapselt Ansatz ist die Nutzung von Java-8 filtern-wrapper Bächen rund um original-Sammlung: stackoverflow.com/questions/19940319/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Guave ist
Multimaps.index
.Hier ist ein Beispiel, welche Partitionen einer Liste von Wörtern in zwei Teile: diejenigen, die haben die Länge > 3 und jene, die nicht.
Drucke:
java.util.stream.Collectors#groupingBy(java.util.function.Function<....>)
geht Es wiewords.stream().collect(Collectors.groupingBy(func))
Mit der neuen java-8-features(stream und lambda epressions), könnten Sie schreiben:
Wenn Sie Eclipse-Sammlungen (ehemals GS-Sammlungen), die Sie verwenden können, die
partition
Methode auf alleRichIterables
.Den Grund für die Verwendung eines benutzerdefinierten Typs
PartitionMutableList
stattPair
ist es, kovariante Rückgabetypen für getSelected() und getRejected(). Zum Beispiel Partitionierung einerMutableCollection
gibt zwei Sammlungen statt der Listen.Wenn Sie Ihre Sammlung nicht
RichIterable
, können Sie immer noch die statische utility in Eclipse Sammlungen.Hinweis: ich bin committer für Eclipse Sammlungen.
Apache Commons Collections
IterableUtils
bietet Methoden für die PartitionierungIterable
Objekte basierend auf einem oder mehreren Prädikaten. (Schauen Sie für diepartition(...)
Methoden.)Beachten Sie, dass im Falle von beschränkten Satz von im Voraus bekannt partiotion Schlüssel kann es viel effizienter, einfach zum Durchlaufen der collection einmal mehr für jede partition Taste überspringen alle anderen-wichtige Elemente, die bei jeder iteration. Als wäre dies nicht zuordnen, viele neue Objekte für den Garbage Collector.
Anderen beiden GC-freundlich und gekapselt Ansatz ist die Nutzung von Java 8 filtern von wrapper-streams rund um die original-Sammlung:
Beide snippets drucken:
scheint ein guter job für die neue Java-12
Collectors::teeing