Middle
Qual é a diferença entre as operações map e flatMap?
sobes.tech IA
Resposta da IA
map transforma cada elemento do stream num novo elemento, retornando um stream com o mesmo número de elementos.
flatMap transforma cada elemento do stream num stream de elementos, e depois combina esses streams aninhados num único stream plano. É usado quando a transformação de um elemento leva a vários elementos.
Exemplo:
Suponhamos que temos uma lista de listas de strings: List<List<String>> listOfLists.
Uso de map:
// Transforma cada lista de strings no seu tamanho
listOfLists.stream()
.map(list -> list.size())
.forEach(System.out::println);
// Vai imprimir os tamanhos de cada lista interna: 2, 3, 1, etc.
Uso de flatMap:
// Transforma cada lista de strings num stream de strings dessa lista
// e combina (achata) em um único stream de todas as strings
listOfLists.stream()
.flatMap(list -> list.stream())
.forEach(System.out::println);
// Vai imprimir todas as strings de todas as listas internas: "a", "b", "c", "d", "e"...
Tabela comparativa:
| Operação | Entrada | Transformação | Saída | Propósito |
|---|---|---|---|---|
map |
Stream<T> |
T -> R |
Stream<R> |
Transformar cada elemento |
flatMap |
Stream<T> |
T -> Stream<R> |
Stream<R> |
Transformar cada elemento em um stream e unir |