Функция flatMap
Функция flatMap
применяет заданную функцию-преобразователь к каждому элементу исходной коллекции.
Функция-преобразователь должна возвращать итерируемый объект Iterable
(например, список, множество или массив).
Все полученные итерируемые объекты объединяются в один плоский список.
Импорт
import kotlin.collections.flatMap
Синтаксис
// Для List, Set, Array и других Iterable
inline fun <T, R> Iterable<T>.flatMap(
transform: (T) -> Iterable<R>
): List<R>
// Для Map
inline fun <K, V, R> Map<out K, V>.flatMap(
transform: (Entry<K, V>) -> Iterable<R>
): List<R>
// Для Sequence
inline fun <T, R> Sequence<T>.flatMap(
transform: (T) -> Sequence<R>
): Sequence<R>
Пример
Преобразуем список чисел в список их квадратов и кубов:
val numbers = listOf(1, 2, 3)
val res = numbers.flatMap {
listOf(it * it, it * it * it)
}
println(res)
Результат выполнения кода:
List<Int> [1, 1, 4, 8, 9, 27]
Пример
Разделим строки на символы и создадим общий список символов:
val words = listOf("abc", "def")
val res = words.flatMap { it.toList() }
println(res)
Результат выполнения кода:
List<Char> ['a', 'b', 'c', 'd', 'e', 'f']
Пример
Работа с массивом Array
:
val array = arrayOf(1, 2, 3)
val res = array.flatMap {
listOf(it, it + 10)
}
println(res)
Результат выполнения кода:
List<Int> [1, 11, 2, 12, 3, 13]
Пример
Работа с множеством Set
:
val set = setOf(1, 2, 3)
val res = set.flatMap {
setOf(it, it * 10)
}
println(res)
Результат выполнения кода:
List<Int> [1, 10, 2, 20, 3, 30]
Пример
Работа с отображением Map
:
val map = mapOf("a" to 1, "b" to 2)
val res = map.flatMap {
listOf(it.key, it.value.toString())
}
println(res)
Результат выполнения кода:
List<Any> ['a', '1', 'b', '2']
Для каких типов работает
Функция flatMap
доступна для следующих типов коллекций:
Iterable
(List
,Set
,MutableList
,MutableSet
)Array
Map
Sequence