Junior — Middle
Quais são as diferenças entre os métodos map e flatMap na API Stream do Java e quais são suas características de uso?
sobes.tech IA
Resposta da IA
Os métodos map e flatMap na API de Streams do Java servem para transformar os elementos de um fluxo, mas funcionam de forma diferente:
-
mapaceita uma função que transforma cada elemento do fluxo em outro elemento. Como resultado, obtém-se um fluxo com o mesmo número de elementos, mas de um tipo ou forma diferente. -
flatMapaceita uma função que transforma cada elemento em um fluxo (Stream) de elementos, e depois combina ("achata") todos esses fluxos num fluxo comum. Isto é útil quando de um único elemento se pretendem obter vários elementos.
Exemplo:
List<String> words = Arrays.asList("hello", "world");
// map: transformamos cada palavra na sua extensão
List<Integer> lengths = words.stream()
.map(String::length)
.collect(Collectors.toList()); // [5, 5]
// flatMap: dividimos cada palavra em letras e combinamos todas as letras num fluxo
List<String> letters = words.stream()
.flatMap(word -> Arrays.stream(word.split("")))
.collect(Collectors.toList()); // [h, e, l, l, o, w, o, r, l, d]
Características de uso:
mapé adequado para transformações simples de elementos um a um.flatMapé necessário quando de um único elemento se quer obter vários, e é preciso "achatar" estruturas aninhadas.