Функция flatMap

Функция flatMap применяет заданную функцию-преобразователь к каждому элементу исходной коллекции. Функция-преобразователь должна возвращать итерируемый объект Iterable (например, список, множество или массив). Все полученные итерируемые объекты объединяются в один плоский список.

Импорт

kotlinimport kotlin.collections.flatMap

Синтаксис

kotlin// Для List, Set, Array и других Iterable
inline fun <T, R> Iterable<T>.flatMap(
  transform: (T) -> Iterable<R>
): List<R>
kotlin// Для Map
inline fun <K, V, R> Map<out K, V>.flatMap(
  transform: (Entry<K, V>) -> Iterable<R>
): List<R>
kotlin// Для Sequence
inline fun <T, R> Sequence<T>.flatMap(
  transform: (T) -> Sequence<R>
): Sequence<R>

Пример

Преобразуем список чисел в список их квадратов и кубов:

kotlinval numbers = listOf(1, 2, 3)
val res = numbers.flatMap { 
  listOf(it * it, it * it * it) 
}
println(res)

Результат выполнения кода:

kotlinList<Int> [1, 1, 4, 8, 9, 27]

Пример

Разделим строки на символы и создадим общий список символов:

kotlinval words = listOf("abc", "def")
val res = words.flatMap { it.toList() }
println(res)

Результат выполнения кода:

kotlinList<Char> ['a', 'b', 'c', 'd', 'e', 'f']

Пример

Работа с массивом Array:

kotlinval array = arrayOf(1, 2, 3)
val res = array.flatMap { 
  listOf(it, it + 10) 
}
println(res)

Результат выполнения кода:

kotlinList<Int> [1, 11, 2, 12, 3, 13]

Пример

Работа с множеством Set:

kotlinval set = setOf(1, 2, 3)
val res = set.flatMap { 
  setOf(it, it * 10) 
}
println(res)

Результат выполнения кода:

kotlinList<Int> [1, 10, 2, 20, 3, 30]

Пример

Работа с отображением Map:

kotlinval map = mapOf("a" to 1, "b" to 2)
val res = map.flatMap { 
  listOf(it.key, it.value.toString()) 
}
println(res)

Результат выполнения кода:

kotlinList<Any> ['a', '1', 'b', '2']

Для каких типов работает

Функция flatMap доступна для следующих типов коллекций:

Смотрите также

  • функцию map,
    которая преобразует элементы без слияния
  • функцию flatten,
    которая объединяет вложенные коллекции без преобразования
  • функцию filter,
    которая фильтрует элементы по условию
  • функцию groupBy,
    которая группирует элементы по ключу