Ist es möglich, .flatMap () oder .collect () gleichmäßig auf mehrere Sammlungen zu verteilen

8

Zum Beispiel gibt es Sammlungen [1,2,3,4,5] , [6,7,8] , [9,0] . Jede Möglichkeit, Schleifen mit Iteratoren zu vermeiden, um diese Sammlungen über die Java 8-Stream-API zu verschachteln, um das folgende Ergebnis zu erhalten - [1,6,9,2,7,0,3,8,4,5] ?

    
igorp1024 08.06.2016, 12:36
quelle

3 Antworten

8

Ich bin mir nicht sicher, ob es einen einfacheren Weg mit der Stream-API gibt, aber Sie können dies tun, indem Sie einen Stream über die Indizes aller zu berücksichtigenden Listen verwenden:

%Vor%

Damit wird die Größe der größten Liste in den gegebenen Listen erreicht. Für jeden Index wird es dann flach mit einem Strom verknüpft, der durch die Elemente jeder Liste an diesem Index gebildet wird (falls das Element existiert).

Dann können Sie es mit

verwenden %Vor%

Unter Verwendung der Protonpack -Bibliothek können Sie die Methode interleave um genau das zu tun:

%Vor%     
Tunaki 08.06.2016, 14:30
quelle
0

Keine gute Lösung. Nur einen Versuch

%Vor%     
omkar sirra 19.08.2016 09:37
quelle
0

Ich mag Tunakis Antwort und habe ein bisschen mehr daran gearbeitet:

%Vor%

Ich wollte sehen, ob wir die anfänglichen Listen auch als Streams behandeln können, wie sich herausstellte. Als Nebeneffekt vermeiden wir get(i) auf einer Liste (wenn das wirklich ein sehr langer LinkedList wäre, würden wir es vermeiden wollen). Ich habe keinen Weg gefunden, ohne Kenntnis einer maximalen Länge der ursprünglichen Listen auszukommen.

    
Ole V.V. 21.08.2016 15:09
quelle

Tags und Links