Universitas Kebudayaan Digital Makassar

Universitas Kebudayaan Digital Makassar (UKDMKS) memadukan inovasi teknologi digital dengan pelestarian budaya lokal. Bergabunglah untuk membangun masa depan berbasis budaya dan teknologi!

android kotlin

Belajar Advanced Collection Function Lengkap di Kotlin


Belajar Advanced Collection Function Lengkap di Kotlin

Kotlin Collection adalah salah satu struktur data mumpuni yang banyak menyediakan fungsi untuk memudahkan kita dalam mengelola dan memanipulasi data. Pada modul-modul sebelumnya, kita sudah mempelajari beberapa fungsi yang disediakan seperti map()sum()sorted(), dan sebagainya.

Pada modul ini kita akan mempelajari beberapa fungsi tingkat lanjut lainnya yang tentunya bisa kita manfaatkan untuk mengelola data seperti yang disebutkan di atas.

Fold

Langsung saja kita mulai dengan fungsi fold, kita bisa dengan mudah melakukan perhitungan setiap nilai yang berada di dalam sebuah collection tanpa harus melakukan iterasi item tersebut satu-persatu menggunakan fungsi fold(). Untuk contoh penggunaannya adalah sebagai berikut:
  1. val numbers = listOf(1, 2, 3)
  2. val fold = numbers.fold(10) { current, item ->
  3.    println(“current $current”)
  4.    println(“item $item”)
  5.    println()
  6.    current + item
  7. }
  8.  
  9. println(“Fold result: $fold”)
  10.  
  11. /*output:
  12.        current 10
  13.        item 1
  14.  
  15.        current 11
  16.        item 2
  17.  
  18.        current 13
  19.        item 3
  20.  
  21.        Fold result: 16
  22. */
Fungsi fold() memerlukan 2 (dua) argumen yaitu nilai awal untuk perhitungan dan lambda expression yang nilai kembaliannya digunakan untuk menentukan nilai awal selanjutnya. 
Nah, di dalam lambda expression nya juga terdapat 2 (dua) argumen. Yaitu, argumen current yang merepresentasikan nilai awal dan argumen item merepresentasikan masing-masing item yang berada pada numbers.
Selain itu, terdapat juga fungsi fold lainnya yaitu foldRight()
Berbeda dengan fungsi fold(), fungsi foldRight() akan melakukan proses iterasi dari indeks terakhir dan posisi dari argumen pada lambda expression nya pun berbeda, di mana argumen item berada pada posisi pertama dan argumen current berada pada posisi kedua. Contohnya seperti berikut:
  1. val numbers = listOf(1, 2, 3)
  2. val fold = numbers.foldRight(10) { item, current ->
  3.    println(“current $current”)
  4.    println(“item $item”)
  5.    println()
  6.    item + current
  7. }
  8.  
  9. println(“Fold result: $fold”)
  10.  
  11. /*output:
  12.        current 10
  13.        item 3
  14.  
  15.        current 13
  16.        item 2
  17.  
  18.        current 15
  19.        item 1
  20.  
  21.        Fold result: 16
  22. */

Drop

Selanjutnya adalah fungsi drop(), fungsi yang bisa kita manfaatkan untuk memangkas item yang berada di dalam sebuah objek collection berdasarkan jumlah yang kita tentukan. Sebagai contoh, saat kita mempunyai sebuah collection seperti berikut:


  1. val number = listOf(1, 2, 3, 4, 5, 6)


Kemudian kita ingin memangkas 3 (tiga) item dari collection di atas. Dengan fungsi drop(), kita bisa melakukannya seperti di bawah ini:


  1. val number = listOf(1, 2, 3, 4, 5, 6)

  2. val drop = number.drop(3)

  3.  

  4. println(drop)

  5. /*

  6.    output: [4, 5, 6]

  7. */


Seperti yang dijelaskan sebelumnya, nilai 3 yang menjadi argumen dari fungsi drop() di atas adalah jumlah item yang akan dipangkas. Pemangkasan dimulai dari posisi atau indeks pertama, lalu bagaimana jika kita ingin memangkas nilai dari indeks terakhir? Kita bisa menggunakan fungsi dropLast(). Contohnya seperti berikut:


  1. val number = listOf(1, 2, 3, 4, 5, 6)

  2. val drop = number.dropLast(3)

  3.  

  4. println(drop)

  5.  

  6. /*

  7.    output: [1, 2, 3]

  8. */



Take

Jika fungsi drop() digunakan untuk memangkas, fungsi take() bisa kita manfaatkan untuk menyaring item yang berada di dalam sebuah objek collection. Pemanggilan fungsi take() sama halnya seperti fungsi drop() di mana kita perlu menentukan jumlah item yang akan disaring. Berikut contoh penggunaannya:


  1. val total = listOf(1, 2, 3, 4, 5, 6)

  2. val take = total.take(3)

  3.  

  4. println(take)

  5.  

  6. /*

  7.    output: [1, 2, 3]

  8. */


Kotlin juga menyediakan fungsi seperti dropLast() yang menjalankan operasi dari posisi atau indeks terakhir yaitu takeLast(). Contohnya seperti berikut:


  1. val total = listOf(1, 2, 3, 4, 5, 6)

  2. val take = total.takeLast(3)

  3.  

  4. println(take)

  5.  

  6. /*

  7.    output: [4, 5, 6]

  8. */


Slice

Setelah pembahasan fungsi take() pada modul sebelumnya, muncul pertanyaan, bagaimana jika kita ingin menyaring item dari posisi tertentu? 
Untuk itu kita bisa memanfaatkan fungsi slice(). Dalam penggunaannya, fungsi slice() membutuhkan sebuah argumen berupa Range yang digunakan untuk menentukan posisi pertama dan terakhir yang akan disaring. Berikut contohnya:


  1. val total = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

  2. val slice = total.slice(3..6)

  3.  

  4. println(slice)

  5.  

  6. /*

  7.    output: [4, 5, 6, 7]

  8. */


Karena menggunakan Range, kita juga bisa menggunakan operator step ketika argumennya disematkan seperti berikut:


  1. val total = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

  2. val slice = total.slice(3..6 step 2)

  3.  

  4. println(slice)

  5.  

  6. /*

  7.    output: [4, 6]

  8. */


Kemudian jika ingin menentukan posisi yang lebih spesifik, kita bisa mendefinisikannya di dalam sebuah collection, kemudian disematkan sebagai argumen. Misal seperti di bawah berikut:


  1. val index = listOf(2, 3, 5, 8)

  2. val total = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

  3. val slice = total.slice(index)

  4.  

  5. println(slice)

  6.  

  7. /*

  8.    output: [3, 4, 6, 9]

  9. */


Kita harus berhati-hati dalam menentukan cakupan index untuk mendapatkan data. Karena dapat menyebabkan terjadinya ArrayIndexOutOfBoundsException jika posisi yang ditentukan tidak terdapat pada objek collection.

Distinct

Saat berurusan dengan item yang sama di dalam sebuah collection, untuk menyaring item yang sama tersebut kita akan melakukan iterasi dan membandingkan setiap itemnya. 
Namun dengan Kotlin kita tidak perlu melakukannya secara manual, karena Kotlin Collection menyediakan fungsi untuk melakukannya dengan mudah yaitu fungsi distinct(). Sebagai contoh:


  1. val total = listOf(1, 2, 1, 3, 4, 5, 2, 3, 4, 5)

  2. val distinct = total.distinct()

  3.  

  4. println(distinct)

  5.  

  6. /*

  7.    output: [1, 2, 3, 4, 5]

  8. */


Sama halnya seperti beberapa fungsi sebelumnya yang sudah dibahas, fungsi distinct() bisa langsung dipanggil dari objek collection. Kita juga bisa menggunakannya pada collection dengan tipe parameter seperti data class. Misal seperti berikut:
  1. data class Item(val key: String, val value: Any)
  2.  
  3. val items = listOf(
  4.    Item(“1”, “Kotlin”),
  5.    Item(“2”, “is”),
  6.    Item(“3”, “Awesome”),
  7.    Item(“3”, “as”),
  8.    Item(“3”, “Programming”),
  9.    Item(“3”, “Language”)
  10. )
  11.  
  12. val distinctItems = items.distinctBy { it.key }
  13. distinctItems.forEach {
  14.    println(“${it.key} with value ${it.value}”)
  15. }
  16.  
  17. /*
  18.    output:
  19.        1 with value Kotlin
  20.        2 with value is
  21.        3 with value Awesome
  22. */
Menariknya, kita bisa juga menentukan proses penyaringan item yang sama seperti apa yang akan dijalankan dengan menggunakan fungsi distinctBy(). Misal kita ingin menyaring item yang memiliki panjang sama, kita bisa melakukannya seperti berikut:


  1. val text = listOf("A", "B", "CC", "DD", "EEE", "F", "GGGG")

  2. val distinct = text.distinctBy {

  3.    it.length

  4. }

  5.  

  6. println(distinct)

  7.  

  8. /*

  9.    output: [A, CC, EEE, GGGG]

  10. */


Yang perlu diperhatikan, fungsi distinct() tidak dapat digunakan pada object Map Collection.

Chunked

Sama seperti fungsi split(), fungsi chunked() bisa kita gunakan untuk memecah nilai String menjadi beberapa bagian kecil dalam bentuk Array. 
Namun untuk penerapannya sedikit berbeda, di mana fungsi split() membutuhkan argumen berupa RegEx sebagai parameter sedangkan chunked() membutuhkan nilai yang akan digunakan sebagai jumlah indeks untuk pemisah. Contoh penggunaannya seperti berikut:


  1. val word = "QWERTY"

  2. val chunked = word.chunked(3)

  3.  

  4. println(chunked)

  5.  

  6. /*

  7.    output:[QWE, RTY]

  8. */


Selain itu, kita juga bisa menggunakannya untuk memodifikasi setiap nilai yang sudah dipecah. Contoh, hasil dari nilai yang sudah dipecah ingin kita buat menjadi huruf kecil, maka kita bisa menggunakan fungsi chunked() seperti berikut: 


  1. val word = "QWERTY"

  2. val chunkedTransform = word.chunked(3) {

  3.    it.toString().toLowerCase()

  4. }

  5.  

  6. println(chunkedTransform)

  7.  

  8. /*

  9.    output: [qwe, rty]

  10. */


Argumen yang berada pada lambda expression di atas merepresentasikan setiap nilai yang sudah dipecah
Asalas | Unlock Anime, Manhwa & Donghua Like Never BeforeFinasteriden: Unlock the Secrets of the Movie World!Marians Woman: Celebrating Beauty Around the WorldArheon - Unveiling the Secrets of Food & Origins WorldwideMPAPER The Ultimate Destination for Anime & Manga FansANMC21: Your Guide to Smarter Living and SuccessMV Agusta of Tampa: Your Automotive News HubTech and Play: Your Hub for Technology, Gaming, and GadgetsRebeccaSommer : Stories & Cultures from Around the WorldUETRABAJANDOJUNTOS - Inside the Music World’s Best-Kept SecretsVandelay Armor - Viral News and Global UpdatesGainesville Sun: Technology & Computers UnveiledGRFX Gaming Party Bus: Journey Through Gaming ErasHouse of Beauty: Celebrating the World's Most Beautiful WomenLearn Mistake: Wisdom for a Better LifeSports Hope Alive: Portal Olahraga DuniaWorld News TW - The Hottest Viral News & Global HeadlinesWriter Sujatha - Life Lessons & Struggles That Inspirehttps://128.199.185.186/https://143.198.89.74/https://165.227.47.178/https://170.64.208.214/https://170.64.192.239/https://46.101.102.216/LVONLINEtelegram lvonlinehttps://www.thecarbongenie.com/https://www.aievea-bijou.com/https://www.slashpolicy.com/https://www.benwestbeech.com/https://www.hh-bags.com/https://www.drupalforfacebook.org/https://www.lvonline.boats/https://www.lvoslot.com/https://www.lvobet.id/https://www.lvoslot.id/https://www.lvonline000.com/https://www.lvonline001.com/https://www.lvonline002.com/https://www.lvonline003.com/https://www.lvonline004.com/https://www.lvonline005.com/https://www.lvonline006.com/https://www.lvonline007.com/https://www.lvonline008.com/https://www.lvonline009.com/https://www.lvonline010.com/https://www.lvonlinepoker.com/https://www.lvonlinebola.com/https://www.lvonlinekasino.com/https://www.lvonline.io/https://www.lvonline.store/https://www.lvonline.online/https://www.situslvonline.us/situs bandar lvonlinehttps://146.190.97.83/https://143.198.209.134/https://188.166.246.204/https://167.172.83.179/https://togelhok.tv/https://www.togelhok.id/https://earthtoweb.com/https://www.elearningfacultymodules.org/https://www.how6youtoknowc.org/https://128.199.71.129/https://167.172.64.185/https://152.42.192.250/https://www.capcut88.com/https://www.capcut88.co/https://towsonsmiles.com/https://www.campur88.com/https://www.campur88.org/https://www.campur88.work/https://www.campur88.xyz/https://www.campur88.lol/https://www.nagacampur.biz/https://www.nagacampur.club/https://www.nagacampur.co/https://www.nagacampur.me/https://www.nagacampur.xyz/https://www.nasicampur88.com/https://165.232.175.185/https://152.42.164.228/https://152.42.194.203/https://152.42.169.214/https://www.campurslot.com/https://www.campurslot.id/https://www.campurslot.co/https://www.campurslot.org/https://www.campurslot.homes/https://www.campurslot.design/Badan Lembaga Pendidikan Ilmu Komputer SubangUniversitas Negeri JeparaLembaga Universitas Kristen MaranthaSMP 3 Negri Nganjukhttps://iklanmalay.com/https://promobola.comhttps://kapsychologists.comhttps://propertycloudsite.comSattar777 NewsVR Slot Online NewsRuby888 Online Slot NewsBerita Global Klik Agenslot228Agen Sloto SG777 NewsGold Club SlotOnline NewsAzar Marra Kech NewsBerita Sidney dan MancanegaraBerita Seputar Sumsel dan DuniaBerita Rehabilitasi Judi OnlineBerita Link Gacor TerupdateItalian Tuition News UpdateWPJS Online NewsBerita Agen Slot RoyalThai Slot Online NewsAll Online Game NewsOnline Game News UpdateAsian Lotre NewsBerita Demo Dana SlotBerita Kalbar ProvLocanda della Maria NewsWye Valley NewsBerita Agen Slot1004Berita Agen Slot33Agen Slot399 NewsPlayboy Slot Online NewsSlot Online BB Slot NewsSlot Online 911 News365 Slot Online NewsEat Atlah Newsambamali canadaInfo Seputar Sepakbolacentre thoughtBerita Hiburanopen etherpadras indo groupresistance manualPrediksi Shiowe want real newsthe poisoned pawnindonesia reclaimed teakswift kennedy and copullip passionmy passion foraim torontoPublic FlashesFriweb TeknologiIngenious Gamersthe late show gardensGishPuppy Newsslot danaOregon Farm Garden NewsViral Pulse GlobaljumpajpPromo Bola soccer Captivates The WorldKapsychologists World First The Science of Mental Health - Understanding Psychiatry: The Science of Mental HealthPropertyCloudSite How to Make Smarter Investments in Today’s MarketArnavichara Ultimate Guide Right Business SoftwareAuscare Disability A Comprehensive Guide to Retirement Homes Finding the Perfect Place to Enjoy Your Golden YearsSeries Mp4 The Future of Entertainment Streaming and Downloadable Video ExplainedAlogirlxinh How to Create a Successful Personal Page or Blog in 2024ihokibethttps://bengbulang-karangpucung.cilacapkab.go.id/https://comunicacion.unsa.edu.ar/https://seychellesbiodiversitychm.sc/https://www.925lms.com/https://www.guisseny.memoire.bzh/https://www.mobiliars.org/https://www.squashparkwieliczka.pl/
Asalas | Unlock Anime, Manhwa & Donghua Like Never BeforeFinasteriden: Unlock the Secrets of the Movie World!Marians Woman: Celebrating Beauty Around the WorldArheon - Unveiling the Secrets of Food & Origins WorldwideMPAPER The Ultimate Destination for Anime & Manga FansANMC21: Your Guide to Smarter Living and SuccessMV Agusta of Tampa: Your Automotive News HubTech and Play: Your Hub for Technology, Gaming, and GadgetsRebeccaSommer : Stories & Cultures from Around the WorldUETRABAJANDOJUNTOS - Inside the Music World’s Best-Kept SecretsVandelay Armor - Viral News and Global UpdatesGainesville Sun: Technology & Computers UnveiledGRFX Gaming Party Bus: Journey Through Gaming ErasHouse of Beauty: Celebrating the World's Most Beautiful WomenLearn Mistake: Wisdom for a Better LifeSports Hope Alive: Portal Olahraga DuniaWorld News TW - The Hottest Viral News & Global HeadlinesWriter Sujatha - Life Lessons & Struggles That Inspirehttps://128.199.185.186/https://143.198.89.74/https://165.227.47.178/https://170.64.208.214/https://170.64.192.239/https://46.101.102.216/LVONLINEtelegram lvonlinehttps://www.thecarbongenie.com/https://www.aievea-bijou.com/https://www.slashpolicy.com/https://www.benwestbeech.com/https://www.hh-bags.com/https://www.lvonline.boats/https://www.lvoslot.com/https://www.lvobet.id/https://www.lvoslot.id/https://www.lvonline000.com/https://www.lvonline001.com/https://www.lvonline002.com/https://www.lvonline003.com/https://www.lvonline004.com/https://www.lvonline005.com/https://www.lvonline006.com/https://www.lvonline007.com/https://www.lvonline008.com/https://www.lvonline009.com/https://www.lvonline010.com/https://www.lvonlinepoker.com/https://www.lvonlinebola.com/https://www.lvonlinekasino.com/https://www.lvonline.io/https://www.lvonline.store/https://www.lvonline.online/https://www.situslvonline.us/situs bandar lvonlinehttps://146.190.97.83/https://143.198.209.134/https://188.166.246.204/https://167.172.83.179/https://togelhok.tv/https://www.togelhok.id/https://earthtoweb.com/https://www.elearningfacultymodules.org/https://www.how6youtoknowc.org/https://128.199.71.129/https://167.172.64.185/https://152.42.192.250/https://www.capcut88.com/https://www.capcut88.co/https://towsonsmiles.com/https://www.campur88.com/https://www.campur88.org/https://www.campur88.work/https://www.campur88.xyz/https://www.campur88.lol/https://www.nagacampur.biz/https://www.nagacampur.club/https://www.nagacampur.co/https://www.nagacampur.me/https://www.nagacampur.xyz/https://www.nasicampur88.com/https://165.232.175.185/https://152.42.164.228/https://152.42.194.203/https://152.42.169.214/https://www.campurslot.com/https://www.campurslot.id/https://www.campurslot.co/https://www.campurslot.org/https://www.campurslot.homes/https://www.campurslot.design/Badan Lembaga Pendidikan Ilmu Komputer SubangUniversitas Negeri JeparaLembaga Universitas Kristen MaranthaSMP 3 Negri Nganjukhttps://iklanmalay.com/https://promobola.comhttps://kapsychologists.comhttps://propertycloudsite.comSattar777 NewsVR Slot Online NewsRuby888 Online Slot NewsBerita Global Klik Agenslot228Agen Sloto SG777 NewsGold Club SlotOnline NewsAzar Marra Kech NewsBerita Sidney dan MancanegaraBerita Seputar Sumsel dan DuniaBerita Rehabilitasi Judi OnlineBerita Link Gacor TerupdateItalian Tuition News UpdateWPJS Online NewsBerita Agen Slot RoyalThai Slot Online NewsAll Online Game NewsOnline Game News UpdateAsian Lotre NewsBerita Demo Dana SlotBerita Kalbar ProvLocanda della Maria NewsWye Valley NewsBerita Agen Slot1004Berita Agen Slot33Agen Slot399 NewsPlayboy Slot Online NewsSlot Online BB Slot NewsSlot Online 911 News365 Slot Online NewsEat Atlah Newsambamali canadaInfo Seputar Sepakbolacentre thoughtBerita Hiburanopen etherpadras indo groupresistance manualPrediksi Shiowe want real newsthe poisoned pawnindonesia reclaimed teakswift kennedy and copullip passionmy passion foraim torontoPublic FlashesFriweb TeknologiIngenious Gamersthe late show gardensGishPuppy Newsslot danaOregon Farm Garden NewsViral Pulse GlobaljumpajpPromo Bola soccer Captivates The WorldKapsychologists World First The Science of Mental Health - Understanding Psychiatry: The Science of Mental HealthPropertyCloudSite How to Make Smarter Investments in Today’s MarketArnavichara Ultimate Guide Right Business SoftwareAuscare Disability A Comprehensive Guide to Retirement Homes Finding the Perfect Place to Enjoy Your Golden YearsSeries Mp4 The Future of Entertainment Streaming and Downloadable Video ExplainedAlogirlxinh How to Create a Successful Personal Page or Blog in 2024ihokibethttps://bengbulang-karangpucung.cilacapkab.go.id/https://comunicacion.unsa.edu.ar/https://seychellesbiodiversitychm.sc/https://www.925lms.com/https://www.guisseny.memoire.bzh/https://www.mobiliars.org/https://www.squashparkwieliczka.pl/https://mok.edu.kz/https://www.mware.cloud/https://www.facilitiescoolingandheating.com.au/https://www.krillpay.ng/https://925worksuite.com/https://www.scenarioaulongcourt-archives.com/http://www.lesateliersdusoleil.fr/