¿Cuál es la diferencia entre los métodos map() y flatMap() en Java 8 Stream?
¡Hola a todos! Recientemente comencé a estudiar Java 8 y estoy tratando de entender el Stream API. Leí varios artículos, pero no logro comprender la diferencia entre los métodos `map()` y `flatMap()`.
Tengo un ejemplo simple. Supongamos que hay una lista de strings:
```java
List words = Arrays.asList("Hello", "World");
```
Si aplico `map()` a esta lista y quiero dividir cada string en caracteres individuales:
```java
words.stream()
.map(word -> word.split(""))
.forEach(System.out::println);
```
Obtengo una salida como `[Ljava.lang.String;@1b6d3586` — algunos códigos hash, no los caracteres. ¿Por qué sucede esto? ¿Cómo puedo obtener una lista de caracteres?
He oído que `flatMap()` puede ayudar, pero no entiendo cómo exactamente. ¿Cuál es la diferencia fundamental entre estos métodos? ¿Cuándo se debe usar `map()` y cuándo `flatMap()`? Agradecería ejemplos claros y explicaciones para principiantes.
<<>>
Diferencia principal entre map() y flatMap()
La diferencia clave es que map()