Angenommen, ich habe ein Array von Java 8-Streams: Stream<T>[] streams
, ich möchte einen Stream erstellen, bei dem jedes Element des neuen Streams ein Array ist, das aus einem Element besteht von jedem der anfänglichen Basisströme (angenommen, sie sind alle sequenziell).Ein Array von Java8-Streams in einen Tupelstrom umwandeln
Zum Beispiel, wenn ich:
streams [ 0 ] returning: ("A", "B", "C"),
streams [ 1 ] returning ("X", "Y", "Z")
and streams [ 2 ] as ("0", "1", "2")
ich einen Stream möchte die
({ "A", "X", "0" }, { "B", "Y", "1" }, { "C", "Z", "2" })
gibt Gibt es einen Code, der dies bereits implementiert? Ich habe eine Idee, wie es geht, es wäre eine Verallgemeinerung der pair case, aber ich würde gerne wissen, ob etwas wiederverwendbar ist schon da ist.
EDIT: sorry, erkannte ich, ich brauche eine Klarstellung:
Ich will nicht die ganze Matrix erstellen, möchte ich einen Stream, der eine Zeile zu einem Zeitpunkt dynamisch zurückgibt (erste A/X/0, dann B/Y/1 usw.), ohne den Speicher mit allen Zeilen im voraus belegen zu müssen. Mir geht es gut mit vernünftigen Annahmen über die Größen der Basis-Streams (z. B. das Minimum zu nehmen, zu stoppen, sobald es einen Stream gibt, der keine Elemente mehr zurückgeben muss).
Ich weiß, dass dies implementiert werden kann, indem zuerst die Basisströme in Iteratoren umgewandelt werden und dann ein neuer Iterator erstellt wird, der von next() ein Element von jedem der Unterstreichungsiteratoren auswählt und eine neue Zeile zurückgibt. Dies ist, was das Paar, das ich oben verlinkt habe, tut und ich könnte es so auf mich selbst anwenden, hier versuche ich zu verstehen, ob es schon in einer Bibliothek gemacht wurde (ich weiß, JDK hat keine solche Funktion).
Das Problem mit Iteratoren ist, dass sie Ihre Streams sequenziell machen. Wenn Sie damit einverstanden sind, haben Sie Ihre Antwort gefunden. –
Hallo @FedericoPeraltaSchaffner, mein Gott! Sie haben Recht, aber die einfache Lösung sollte auch sein, TupleSplitterator zu realisieren (Stream.spliterator() existiert). Ich werde es später tun, danke für deinen Kommentar. – zakmck