Java 8, Streams, um die doppelten Elemente zu finden
Ich versuche, Liste doppelte Elemente in die integer-Liste sagen für zB
List<Integer> numbers = Arrays.asList(new Integer[]{1,2,1,3,4,4});
Verwendung von Streams des jdk 8. Hat den schon jemand ausprobiert. Zum entfernen der Duplikate, die wir verwenden können, die distinct () - api. Aber wie sieht es mit den duplizierten Elementen ? Kann jemand mir helfen ?
InformationsquelleAutor der Frage Siva | 2014-12-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
Sammlungen.Frequenz
:InformationsquelleAutor der Antwort Bao Dinh
Benötigen Sie ein set (
allItems
unten) zu halten, die ganze array-Inhalte, aber das ist O(n):InformationsquelleAutor der Antwort Dave
Basic-Beispiel. Die erste Hälfte baut Frequenz-Karte, zweite Hälfte verkleinert, um eine gefilterte Liste. Vermutlich nicht so effizient, wie Dave die Antwort, aber vielseitiger ist (wie, wenn Sie wollen, um zu erkennen, genau zwei usw.)
InformationsquelleAutor der Antwort RobAu
Meine StreamEx Bibliothek verbessert die Java-8-streams bietet eine spezielle operation
distinct(mindestens)
die können behalten Sie nur Elemente, die mindestens die angegebene Anzahl von Zeiten. So kann dein problem gelöst werden, wie dieses:Intern ist es ähnlich wie @Dave Lösung zählt es Objekte, zu unterstützen, andere wollten Mengen und es ist-parallel-freundlich (es verwendet
ConcurrentHashMap
für parallelisiert stream, aberHashMap
für sequenziell). Für große Datenmengen können Sie Holen Sie sich ein speed-up mit.parallel().distinct(2)
.InformationsquelleAutor der Antwort Tagir Valeev
Einen O(n) Weg wäre wie folgt:
Den Raum Komplexität gehen würde Doppel in diesem Ansatz ist aber, dass der Raum ist nicht eine Verschwendung; in der Tat, wir haben jetzt die duplizierte allein nur als Set sowie ein weiteres Set mit dem alle Duplikate entfernt zu werden.
InformationsquelleAutor der Antwort Thomas Mathew
Können Sie die duplizierte wie diese :
InformationsquelleAutor der Antwort Oussama Zoghlami
Ich denke, dass die grundlegenden Lösungen für die Frage sollte sein wie folgt:
gut, es wird nicht empfohlen, eine filter-operation, aber zum besseren Verständnis, ich habe es verwendet, außerdem sollte es eine custom filtration in zukünftigen Versionen.
InformationsquelleAutor der Antwort Prashant
Ich denke, ich habe eine gute Lösung wie kann man das problem, wie diese - Liste => Liste mit Gruppierung nach Etwas.a & Etwas.b.
Es gibt erweiterte definition:
Klasse A, Liste1 es ist nur eingehenden Daten - die Magie der Objekte.hash(...) 🙂
InformationsquelleAutor der Antwort Константин Журов
Haben Sie verwenden, um die java-8-Idiome (Dämpfe)? Perphaps eine einfache Lösung wäre, sich zu bewegen die Komplexität auf eine Karte gleichermaßen Datenstruktur mit zahlen als Schlüssel (ohne Wiederholung) und die Zeiten ocurrs als Wert. Sie konnte, Sie Durchlaufen, dass die Karte nur etwas mit diesen zahlen, die sind ocurrs > 1.
InformationsquelleAutor der Antwort Victor
Probieren Sie diese Lösung:
InformationsquelleAutor der Antwort Ilia Galperin
Ein multiset ist eine Struktur, Beibehaltung der Anzahl der vorkommen für jedes element. Mit Guave Umsetzung:
InformationsquelleAutor der Antwort numéro6