Ответ
map преобразует каждый элемент потока в другой элемент, сохраняя структуру потока (1:1).
flatMap преобразует каждый элемент в новый поток, затем объединяет все потоки в один (1:N).
Пример с List<String>:
val list = listOf("Hello", "World")
// map: List<String> → List<List<Char>>
list.map { it.toList() } // [[H, e, l, l, o], [W, o, r, l, d]]
// flatMap: List<String> → List<Char>
list.flatMap { it.toList() } // [H, e, l, l, o, W, o, r, l, d]
Используй flatMap, когда нужно "развернуть" вложенные коллекции или асинхронные операции (например, Flow/RxJava).