Übrigens habe ich Java aktualisiert, also werde ich es mit REPL machen. Geben Sie einfach jshell in die Konsole ein (java9 oder höher?)
jshell>
Wie es geht!
jshell> var streamA = Stream.of(1,2,3);
streamA ==> java.util.stream.ReferencePipeline$Head@1f36e637
jshell> var streamB = Stream.of(4,5);
streamB ==> java.util.stream.ReferencePipeline$Head@578486a3
jshell> Stream.concat(streamA, streamB).forEach(System.out::println);
1
2
3
4
5
Wie Sie sehen können, hat concat nur zwei Argumente? https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#concat-java.util.stream.Stream-java.util.stream.Stream-
Erstens gab es aufgrund der Art des Stroms kein Problem mit dem Betrieb der Verbindung. Lass uns ehrlich gehen.
jshell> var streamA = Stream.of(1,2,3);
streamA ==> java.util.stream.ReferencePipeline$Head@536aaa8d
jshell> var streamB = Stream.of(4,5);
streamB ==> java.util.stream.ReferencePipeline$Head@e320068
jshell> var streamC = Stream.of(6,7,8,9);
streamC ==> java.util.stream.ReferencePipeline$Head@1f57539
jshell> Stream.of(streamA, streamB, streamC).flatMap(Function.identity()).forEach(System.out::println);
1
2
3
4
5
6
7
8
9
jshell> var streamA = Stream.of(1,2,3);
streamA ==> java.util.stream.ReferencePipeline$Head@27a8c74e
jshell> var streamB = Stream.of(4,5);
streamB ==> java.util.stream.ReferencePipeline$Head@2d8f65a4
jshell> var streamC = Stream.of(6,7,8,9);
streamC ==> java.util.stream.ReferencePipeline$Head@1b68ddbd
jshell> Stream.of(streamA, streamB, streamC).
...> flatMap(Function.identity()).
...> forEach(System.out::println);
1
2
3
4
5
6
7
8
9
Diese Methode war meine Grenze. Wenn Sie etwas herausfinden, werde ich es (vielleicht) hinzufügen. Ich meine, die Periode ist am Ende unangenehm. Nein, in natürlicher Sprache ist dies normales Fahren.
Wie Sie sehen können, ist das Reduzieren optional und es ist zweimal mühsam. YO
jshell> var streamA = Stream.of(1,2,3);
streamA ==> java.util.stream.ReferencePipeline$Head@2781e022
jshell> var streamB = Stream.of(4,5);
streamB ==> java.util.stream.ReferencePipeline$Head@57e1b0c
jshell> var streamC = Stream.of(6,7,8,9);
streamC ==> java.util.stream.ReferencePipeline$Head@4232c52b
jshell> Stream.of(streamA, streamB, streamC).
...> reduce(Stream::concat)
$38 ==> Optional[java.util.stream.ReferencePipeline$Head@ea1a8d5]
Das ist alles für heute. Sagen Sie sich, dass es wichtig ist, nach und nach fortzufahren.
"Wenn Sie nicht möchten, dass Reduzieren optional ist, können Sie eine Reduktion mit drei Argumenten verwenden."
Stream.of(streamA, streamB, streamC).reduce(Stream.empty(), Stream::concat, Stream::concat);
Du hast recht. Nein, aber dann ist es in Ordnung, Argument 2 nicht mehr zu reduzieren, oder?
Stream.of(streamA, streamB, streamC).reduce(Stream.empty(), Stream::concat)
Die Geschichte von Reduce ist Beckenbauer.
Recommended Posts