quasi Streams die auf primitiven Typen operieren...
Das ist zu vereinfacht und unpräzise formuliert. "Primitive Typen" in Java bedeutet ja auch was ganz anderes.
Also... wenn wir uns einfach den Typ von map() angucken:
(Stream<T>, Function<T, R>) -> Stream<R>
dann sehen wir, dass map() eben einfach nur eine Funktion auf jedes der Element
T
im Eingabestream vom Typ
Stream<T>
anwendet und als Ergebnis für jedes
T
eben ein
R
erhält. Das Ergebnis insgesamt ist dann also ein
Stream<R>
. Sowohl
T
als auch
R
kann hier alles beliebige sein, z.B. selbst auch wieder Streams oder Listen, im Prinzip jeder beliebige Referenztyp.
Wenn wir uns jetzt den Typ von flatMap() angucken:
(Stream<T>, Function<T, Stream<R>>) -> Stream<R>
dann sehen wir hier einen einzigen Unterschied, nämlich den Typ der Funktion, die für jedes
T
im Eingabestream angewendet wird. Die Funktion soll hier nämlich kein
R
zurückliefern, sondern immer einen
Stream<R>
. Die Funktion kann also für ein
T
keinen, einen oder sogar mehrere Werte zurückliefern, in Form eine Streams. Und alle diese Streams werden einfach am Ende aneinanderkonkateniert, und ergeben so dann den Gesamt-Ergebnis-Stream vom Typ
Stream<R>
. Auch hier kann
T
und
R
wieder jeder beliebige Referenztyp sein, z.B. auch selber wieder ein Stream.
Ich empfehle, wie in meiner ersten Antwort auch, sich einfach den Stackoverflow Thread
https://stackoverflow.com/questions...nce-between-map-and-flatmap-methods-in-java-8 durchzulesen. Da wird das besser erklärt als wir das hier könnten.