Sobes.tech
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