Ich suche nach einer präzisen Möglichkeit, Elemente in einer Liste in einem bestimmten Index herauszufiltern. Meine Beispieleingabe sieht so aus:
%Vor% Ich möchte Objekte am Index 2
, 4
, 6
, 8
ausfiltern. Ich habe eine for-Schleife, die Elemente überspringt, die mit dem Index übereinstimmen, aber ich hatte gehofft, dass es eine einfache Möglichkeit gibt, dies mit Streams zu tun. Das Endergebnis würde so aussehen:
Sie können ein IntStream
generieren, um die Indizes der ursprünglichen Liste nachzuahmen, dann die in der filteredIndexes
-Liste entfernen und diese Indizes dann dem entsprechenden Element in der Liste zuordnen (besser wäre es zu) Haben Sie eine HashSet<Integer>
für Indizes, da sie per Definition eindeutig sind, so dass contains
eine konstante Zeitoperation ist).
Wenn Ihre filteredIndexes
Liste vorsortiert ist, können Sie vermeiden, jedes Element auf diese Weise zu überprüfen:
Hier erstellen wir eine Reihe von Unterlisten, die alle Elemente zwischen den gefilterten Indizes enthalten und sie dann in die einzelne endgültige Liste abflachen. Für große Eingaben (z. B. eine Million von Zahlen) könnte diese Lösung Größenordnungen schneller sein als von @AlexisC vorgeschlagen.
Tags und Links java java-8 java-stream