Рубрики

Котлин | Коллекция Трансформация

Стандартная библиотека Kotlin предоставляет различный набор функций расширения для преобразования коллекций. Эти функции помогают в создании новых коллекций из существующих коллекций на основе правил, определенных преобразованием.

Существует разное количество функций преобразования:

  • картографирование
  • Архивирование
  • ассоциация
  • уплощение
  • Строковое представление

Картография —

Преобразование отображения используется для создания коллекции из полученных результатов функции на элементах некоторой другой коллекции, а базовой функцией, используемой для отображения, является map () . Когда применяется данная лямбда-функция к каждому последующему элементу, она возвращает список лямбда-результатов.
Он поддерживает порядок элемента, который хранится в исходной коллекции. Чтобы применить преобразование, которое дополнительно использует индекс элемента в качестве аргумента, мы можем использовать mapIndexed () .

Котлинская программа картирования —

fun main(args : Array<String>) {

    val numbers = setOf(1, 2, 3)

  

    // умножаем все элементы на 2

    println("The new elements are: "+numbers.map { it * 2 })

  

    // множественный idx с элементом

    println("The modified elements are: "+numbers.mapIndexed 

    { idx, value -> value * idx })

}

Выход:

The new elements are: [2, 4, 6]
The modified elements are: [0, 2, 6]

После преобразования, если мы получим нулевые значения для определенных элементов, мы можем легко отфильтровать нулевые значения из коллекции только путем вызова функции mapNotNull () вместо map () или mapIndexedNotNull () вместо mapIndexed () .

fun main(args: Array<String>) {

    val numbers = setOf(1, 2, 3)

  

    // отфильтровать нулевые значения и распечатать

    println("Numbers without null value: "+numbers.mapNotNull

    { if ( it == 1) null else it * 2 })

  

    println("Numbers without null value: "+numbers.mapIndexedNotNull

    { idx, value -> if (idx == 0) null else value * idx })

}

Выход:

Numbers without null value: [4, 6]
Numbers without null value: [2, 6]

Молнии —

Преобразование по Zip помогает в построении пар, выбирая элементы из обеих коллекций из одного и того же значения индексации, и это можно сделать с помощью функции расширения zip () . Его можно вызвать для коллекции или массива, передав в качестве аргумента другую коллекцию (массив), и он возвращает список объектов Pair .

Первые элементы пар из получающей коллекции и вторые из коллекции передаются в качестве аргумента. Если размеры коллекций не совпадают, то результирующая коллекция zip () эквивалентна коллекции меньшего размера, а последние элементы большей коллекции исключаются из результатов. Она также может быть названа в инфиксе виде почтового индекса б.

Kotlin программа использования метода zip () —

fun main(args: Array<String>) {

    val numbers = listOf("One","Two","Three","four")

    val integers = listOf(1,2,3,4)

  

    // соединяем номер строки с целыми числами

    println(numbers zip integers)

  

    val newInt = listOf(1,2)

    // пара строк с числом меньше

    println("New pairs :"+numbers.zip(newInt))

}

Выход:

[(One, 1), (Two, 2), (Three, 3), (four, 4)]
New pairs :[(One, 1), (Two, 2)]

Если у нас есть список пар, то мы можем выполнить обратное преобразование с помощью функции расширения разархивирования, которая создает два списка из этих пар:

  • Первый список содержит первый элемент каждой пары из исходного списка.
  • Второй список содержит вторые элементы из исходного списка.

Kotlin программа использования метода unzip () —

fun main(args: Array<String>) {

    val companies = listOf("Apple" to 1, "Google" to 2,

        "Amazon" to 3, "Facebook" to 4)

  

    // распечатать после распаковки пар

    println("Pairs unzipped: "+companies.unzip())

}

Выход:

Pairs unzipped: ([Apple, Google, Amazon, Facebook], [1, 2, 3, 4])

Ассоциация —

Преобразования ассоциаций помогают в построении карт из элементов коллекции и определенных значений, связанных с ними. Здесь основной функцией ассоциации является associateWith (), которая создает карту, в которой исходные элементы коллекции являются ключами, а соответствующие значения получаются заданной функцией преобразования из исходных элементов.

Примечание. Если мы получим два элемента равными, на карте останется только последний элемент.

Kotlin программа использования метода associateWith () —

fun main(args: Array<String>) {

  

    val captains = listOf("Kohli", "Root", "Smith", "Williamson","Root")

      

    // выводим элементы, связанные с их длиной

    println(captains.associateWith { it.length })

}

Выход:

{Kohli=5, Root=4, Smith=5, Williamson=10}

Сглаживание —

Преобразование Flatten помогает преобразовать всю вложенную коллекцию в одну коллекцию. Если мы работаем с вложенными коллекциями, мы находим полезными стандартные библиотечные функции, которые обеспечивают плоский доступ к элементам вложенных коллекций.

Базовая функция — flatten (), и мы можем вызывать ее для коллекции коллекций, например, для List of Sets, а затем она возвращает единый список всех элементов вложенных коллекций.

Kotlin программа использования метода flatten () —

fun main(args: Array<String>) {

  

    val openers = listOf(setOf("Warner", "Finch") ,setOf("Roy","Bairstow")

        ,setOf("Rohit,Dhawan"),setOf("Guptill","Henry"))

  

    // выводим элементы, связанные с их длиной

    println("All the openers are: "+openers.flatten())

}

Выход:

All the openers are: [Warner, Finch, Roy, Bairstow, Rohit,Dhawan, Guptill, Henry]

Строковое представление —

Строковое представление означает, что мы можем извлечь содержимое коллекции в читаемом формате. Есть две функции, которые преобразуют коллекции в строки:

  • joinToString ()
  • joinTo ()

Функция joinToString () создает единственную строку из элементов коллекции на основе предоставленных аргументов. И функция joinTo () также создает одну строку, но добавляет результат к данному объекту Appendable .

Когда вышеупомянутые функции вызываются с аргументами по умолчанию, обе возвращают результат, аналогичный вызову toString () для коллекции: строка из строковых представлений элементов, разделенных запятыми с пробелами.

Kotlin программа использования методов представления строк —

fun main(args: Array<String>) {

    val colors = listOf("Red","Green","Blue","Orange","Yellow")

  

    println(colors)

    // объединяем все элементы в один список

    println(colors.joinToString())

  

    val listString = StringBuffer("Colors are: ")

    colors.joinTo(listString)

    println(listString)

}

Выход:

[Red, Green, Blue, Orange, Yellow]
Red, Green, Blue, Orange, Yellow
Colors are: Red, Green, Blue, Orange, Yellow

Рекомендуемые посты:

Котлин | Коллекция Трансформация

0.00 (0%) 0 votes