Друкарня від WE.UA

Шпаргалка по Kotlin ч. 1 Колекції

В першій частині хочу написати про колеції та їх функції, які мало хто використовує, але можуть бути дуже корисними в написанні коду.

Якщо вам цікаво детальніше почитати - ось тут посилання на документацію

Актуальні колекції в Kotlin:

  • List - впорядкована колекція з доступом за індексом

  • Set - колекція унікальних елементів

  • Map - набір ключ-значення

Ці колекції є двох типів:

  • read-only - раз створив і все

  • mutable - дозволяють видаляти та додавати елементи в колекції

Collection interfaces hierarchy
Діаграмка з документації

Дефолтні імплементації:

  • MutableList - це ArrayList

  • MutableSet - це LinkedHashSet

  • MutableMap - це LinkedHashMap

1/ partition - функція, яка дозволяє розділити колекції на два списки

val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
// Split the numbers into two lists, one containing even numbers and the other containing odd numbers. 
val (evens, odds) = numbers.partition { it % 2 == 0 }

Тут можемо наш список розділити на два за певної умови. Для прикладу нам треба показати окремо переглянуті новини та нові. Ми не фільтруємо двічі, а за допомогою однієї функції отримуємо два списки.

2/ associateWith - функція, яка повертає Map, де ключі є символами з заданої послідовності, а значення створюються функцією valueSelector

fun main(args: Array<String>) {
  // Create a list of words
  val words = listOf("a", "abc", "ab", "def", "abcd")

  // Use the `associateWith` function to create a map where the keys are the words and the values are their lengths
  val withLength = words.associateWith { it.length }

  // Print the keys and values of the map
  println(withLength.keys) // [a, abc, ab, def, abcd]
  println(withLength.values) // [1, 3, 2, 3, 4]
}

Уявімо, що нам треба знати індекс першої новини в списку залежно від того, по якому дню натисне користувач. Комбінуємо з groupBy, який погрупує за днем. Потім через associateWith шукаємо перший індекс через indexOfFirst.

3/ zipWithNext - функція приймає послідовність і повертає список пар сусідніх елементів послідовності.

val values = listOf(1, 4, 9, 16, 25, 36)
val deltas = values.zipWithNext { tail, head -> head - tail }

println(deltas) // [3, 5, 7, 9, 11]

Ця функція дозволяє нам отримати наступний елемент та вибраний. Так ми можемо створити новий список. Для прикладу, нам треба показувати в списку, що це остання новина, яка була в пений день тижня. Перевіряємо настуну новину, якщо вона відбулася наступного дня, значить ми можемо модифікувати наш елемент.

4/ distinct та distinctBy- функція вилучення дублікатних елементів з колекції

fun main(args: Array<String>) {
  val listOfStrings = listOf("apple", "banana", "apple", "orange", "grape")
  val distinctStringList = listOfStrings.distinct()

  println(distinctStringList)
}

Для прикладу, нам треба отримати список виробників зі списку товарів. Використовуємо distinctBy{ it.producer } і отримаємо лише унікальних виробників.

/5 reduce - перетворення колекції в єдиний результат

fun main(args: Array<String>) {
  val listOfPrices = listOf(100, 200, 300)
  val totalPrice = listOfPrices.reduce { acc, price -> acc + price }

  println(totalPrice)
}

Нам потрібно порахувати загальну суму, яку повиннен заплатити покупець. Беремо список всіх його товарів, використовуємо reduce і отримаємо загальну суму.

⚠️ Список не може бути пустий, бо буде креш, тому використовуємо reduceOrNull, якщо не впевнені, що наш список містить елементи.

/6 all і any- чи всі елементи задовольняють певну умову та чи хоч один задовільняє умову

fun main(args: Array<String>) {
  val listOfNumbers = listOf(1, 2, 3, 4, 5)
  val allEven = listOfNumbers.all { it % 2 == 0 }

  println(allEven)
}

Треба перевірити чи всі студенти здали домашнє завдання. Використовуємо all і бачимо результат. Якщо нам треба знати чи хоч один студент здав використовуємо - any.

/7 elementAt, elementAtOrElse та elementAtOrNull - отримати елемент за індексом

val list = listOf(1, 2, 3)
println(list.elementAtOrNull(0)) // 1
println(list.elementAtOrNull(2)) // 3
println(list.elementAtOrNull(3)) // null

val emptyList = emptyList<Int>()
println(emptyList.elementAtOrNull(0)) // null

Якщо нам треба отримати елемент за індексом.

⚠️ Памʼятаємо, що якщо ми використовуємо elementAt, а такого елемента немає, то буде креш. Тому використовуємо elementAtOrNull чи elementAtOrElse та придумуємо, що робити у випадку null.

Evil Kermit Meme Generator - Piñata Farms - The best meme generator and  meme maker for video & image memes

Ну якось так. Пишіть про функції колекцій які ви використовуєте найчастіще 😉

Статті про вітчизняний бізнес та цікавих людей:

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Roman K
Roman K@rmnkhr

4Довгочити
850Перегляди
13Підписники
На Друкарні з 15 квітня 2023

Більше від автора

  • Створення логотипа Perplexity з матового скла у Jetpack Compose

    У цьому туторіалі ми створимо анімований логотип Perplexity, що має ефект матового скла. Ми використаємо бібліотеку haze від Chris Banes для імітації скла та graphicsLayer для 3D-анімації

    Теми цього довгочиту:

    Android
  • Як перемагати на хакатонах

    Розкажу про хакатони, у яких я брав участь з 2015 року. Ідеї, презентації, перемоги, висновки, смішні ситуації та меми

    Теми цього довгочиту:

    Hackathon
  • Як працює ChatGPT простими словами

    Спробуємо розібратися як працють нейронки та в чому унікальність ChatGPT

    Теми цього довгочиту:

    Chat Gpt

Це також може зацікавити:

  • Where To Find The Best Mobile App Development Company For Your Business

    In the modern era, the smartphone has become an extension of the human self. From ordering food to managing finances, from social networking to controlling smart homes, mobile applications have seamlessly integrated into every facet of daily life.

    Теми цього довгочиту:

    Android
  • Оновлення до One UI 7 - купа проблем, які не мають рішень

    Вітаю. Це спонтанний довгочит виключно про проблеми нової оболонки смартфонів Samsung. Уточню - тут нема перерахування всіх нових функцій, а лише проблеми, з якими я зіткнувся після оновлення. Можливо, це буде корисно тим, хто вагається перед оновленням. Приємного ознайомлення!

    Теми цього довгочиту:

    Android

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити:

  • Where To Find The Best Mobile App Development Company For Your Business

    In the modern era, the smartphone has become an extension of the human self. From ordering food to managing finances, from social networking to controlling smart homes, mobile applications have seamlessly integrated into every facet of daily life.

    Теми цього довгочиту:

    Android
  • Оновлення до One UI 7 - купа проблем, які не мають рішень

    Вітаю. Це спонтанний довгочит виключно про проблеми нової оболонки смартфонів Samsung. Уточню - тут нема перерахування всіх нових функцій, а лише проблеми, з якими я зіткнувся після оновлення. Можливо, це буде корисно тим, хто вагається перед оновленням. Приємного ознайомлення!

    Теми цього довгочиту:

    Android