Avatar ·

Was ist der Unterschied zwischen den Methoden map() und flatMap() in Java 8 Stream?

Hallo zusammen! Ich habe kürzlich mit Java 8 angefangen und versuche, mich mit dem Stream API vertraut zu machen. Ich habe mehrere Artikel gelesen, kann aber den Unterschied zwischen den Methoden `map()` und `flatMap()` nicht verstehen. Ich habe ein einfaches Beispiel. Angenommen, es gibt eine Liste von Strings: ```java List words = Arrays.asList("Hello", "World"); ``` Wenn ich `map()` auf diese Liste anwende und jeden String in einzelne Zeichen aufteilen möchte: ```java words.stream() .map(word -> word.split("")) .forEach(System.out::println); ``` Erhalte ich eine Ausgabe wie `[Ljava.lang.String;@1b6d3586` – irgendwelche Hash-Codes, keine Zeichen. Warum passiert das? Wie bekomme ich eine Liste von Zeichen? Ich habe gehört, dass `flatMap()` helfen kann, verstehe aber nicht genau, wie. Was ist der grundlegende Unterschied zwischen diesen Methoden? Wann sollte man `map()` verwenden und wann `flatMap()`?