Функция flatten

Функция flatten преобразует коллекцию, содержащую другие коллекции, в единую плоскую коллекцию. Она объединяет все элементы вложенных коллекций в один общий список. Функция применяется к коллекциям типа Iterable<Iterable<T>>, Array<Array<T>>, List<List<T>> и Set<Set<T>>. Для Map функция flatten не работает напрямую.

Синтаксис

kotlinfun <T> Iterable<Iterable<T>>.flatten(): List<T>
kotlinfun <T> Array<out Array<out T>>.flatten(): List<T>

Пример

Преобразуем список списков в плоский список:

kotlinval nestedList = listOf(
  listOf(1, 2, 3),
  listOf(4, 5),
  listOf(6, 7, 8, 9)
)
val res = nestedList.flatten()
println(res)

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

kotlinList<Int> [1, 2, 3, 4, 5, 6, 7, 8, 9]

Пример

Преобразуем массив массивов в плоский список:

kotlinval nestedArray = arrayOf(
  arrayOf('a', 'b', 'c'),
  arrayOf('d', 'e'),
  arrayOf('f', 'g', 'h')
)
val res = nestedArray.flatten()
println(res)

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

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

Пример

Преобразуем множество множеств в плоский список:

kotlinval nestedSet = setOf(
  setOf("apple", "banana"),
  setOf("cherry", "date"),
  setOf("elderberry", "fig")
)
val res = nestedSet.flatten()
println(res)

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

kotlinList<String> ["apple", "banana", "cherry", "date", "elderberry", "fig"]

Пример

Для Map функция flatten не работает напрямую. Сначала нужно преобразовать карту в коллекцию пар ключ-значение:

kotlinval map = mapOf(
  "first" to listOf(1, 2, 3),
  "second" to listOf(4, 5),
  "third" to listOf(6, 7, 8)
)
val res = map.values.flatten()
println(res)

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

kotlinList<Int> [1, 2, 3, 4, 5, 6, 7, 8]

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

  • функцию flatMap,
    которая сначала преобразует элементы, а затем flatten
  • функцию union,
    которая объединяет несколько коллекций в одну
  • функцию plus,
    которая объединяет две коллекции
  • функцию addAll,
    которая добавляет все элементы коллекции в изменяемую коллекцию