Друкарня від 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

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

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

  • Вітаємо з Різдвом Христовим!

    Друкарня та платформа WE.UA вітають всіх наших читачів та авторів зі світлим святом Різдва! Зичимо всім українцям довгожданого миру, міцного здоровʼя, злагоди, родинного затишку та втілення всього доброго і прекрасного, чого вам побажали колядники!

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

    Різдво
  • Каблучки – прикраси, які варто купувати

    Ювелірні вироби – це не тільки спосіб витратити гроші, але і зробити вигідні інвестиції. Бо вартість ювелірних виробів з кожним роком тільки зростає. Тому купуючи стильні прикраси, ви вигідно вкладаєте кошти.

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

    Як Вибрати Каблучку
  • П'ять помилок у виборі домашнього текстилю, які псують комфорт сну

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

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

    Домашній Текстиль
  • Як знайти житло в Києві

    Переїжджаєте до Києва і шукаєте житло? Дізнайтеся, як орендувати чи купити квартиру, перевірити власника та знайти варіанти, про які зазвичай не говорять.

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

    Агентство Нерухомості
  • Як заохотити дитину до читання?

    Як залучити до читання сучасну молодь - поради та факти. Користь читання для дітей - основні переваги. Розвиток дітей - це наше майбутнє.

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

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

773Прочитань
2Автори
13Читачі
На Друкарні з 15 квітня

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

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

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

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

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

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

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

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

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

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

    Chat Gpt

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

  • Android застосунок прямо з бліндажа. Пролог

    До повномасштабного вторгнення я спокійно працював Web-розробником. Створював сайти на WordPress, Vercel, інтернет-магазини на Magento 2 і постійно освоював якісь нові web-сервіси з метою покращення своєї роботи.

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

    Android Development
  • Galaxy Unpacked 2024 - чим Samsung НЕ здивували

    Все, що показали - було злито за тиждень чи навіть раніше до події. Тому, якщо ви вже ознайомились зі зливами тиждень-два тому - сенсу читати далі немає, чесно :) Всіх інших - вітаю, спробую таки пояснити, шо ж це за S24 series і яке воно.

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

    Samsung

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

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

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

  • Android застосунок прямо з бліндажа. Пролог

    До повномасштабного вторгнення я спокійно працював Web-розробником. Створював сайти на WordPress, Vercel, інтернет-магазини на Magento 2 і постійно освоював якісь нові web-сервіси з метою покращення своєї роботи.

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

    Android Development
  • Galaxy Unpacked 2024 - чим Samsung НЕ здивували

    Все, що показали - було злито за тиждень чи навіть раніше до події. Тому, якщо ви вже ознайомились зі зливами тиждень-два тому - сенсу читати далі немає, чесно :) Всіх інших - вітаю, спробую таки пояснити, шо ж це за S24 series і яке воно.

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

    Samsung