Java-Stream-Filter Elemente des spezifischen Index

7

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:

%Vor%     
Vedanth 29.03.2016, 20:01
quelle

3 Antworten

14

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

%Vor%     
Alexis C. 29.03.2016, 20:07
quelle
4

Wenn Ihre filteredIndexes Liste vorsortiert ist, können Sie vermeiden, jedes Element auf diese Weise zu überprüfen:

%Vor%

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.

    
Tagir Valeev 30.03.2016 07:53
quelle
2

Wenn Sie Ihre Indizes absteigend sortieren, können Sie java.util.List.remove(int) verwenden, um die Elemente zu entfernen.

%Vor%     
slartidan 19.05.2016 10:52
quelle

Tags und Links