亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

在Kotlin開發中如何使用集合詳解

2024-07-21 23:03:44
字體:
來源:轉載
供稿:網友

關于 Kotlin 開發

使用 Kotlin 開發 Android App 在 Java 工程師群體中變得越來越流行。如果你由于某些原因錯過了 Kotlin,我們強烈建議你看一下這篇文章。

對于那些處在技術前沿和喜歡 Kotlin 的開發者來說,本篇文章和他們息息相關。所以,下面就讓我們來看一下怎樣在 Kotlin 中使用集合吧。

Kotlin中的集合是基于 Java 集合的框架。本篇文章主要講的是 kotlin.collections 包中的幾個特性。

數據處理

Kotlin 中有一個拓展函數的特性,這個特性可以使 Kotlin 標準庫(stdlib)支持 JDK 的中的類的方法。舉個例子:如果你打開Kotlin 標準庫中的 open_Collection.kt 文件,你可以找到很類似于下面這樣的方法:

/*** Returns a list containing only elements matching the given [predicate].*/public inline fun <T> Iterable<T>.filter(predicate: (T) -> Boolean): List<T> { return filterTo(ArrayList<T>(), predicate)}

所以,你寫的代碼可能是下面這個樣子:

val originalList = listOf(1, 2, 3, 4, 5, 6)assertEquals(listOf(2, 4, 6), originalList.filter { it % 2 == 0 })val originalList = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)val result = originalList.firstOrNull { it > 4 }assertEquals(result, 5)val originalList = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)val result = originalList.getOrElse(12) { 12 }assertEquals(result, 12)val originalList = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)val result = originalList.dropWhile { it < 5 }assertEquals(result, listOf(5, 6, 7, 8, 9, 10))val originalList = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)val result = originalList    .dropWhile { it < 5 }    .find { it < 7 }assertEquals(result, 5)

你需要注意的是:filter和dropWhile 就像其他操作符一樣,返回的是一個新的事例。這意味著 originalList 不會改變。

為了更好的理解代碼底層到底發生了什么,我們打開源碼看一下 listOf() 方法:

/** Returns a new read-only list of given elements. The returned list is serializable (JVM). */public fun <T> listOf(vararg elements: T): List<T> = if (elements.size > 0) elements.asList() else emptyList()

由于RxJava和 Java 8 的 Stream API 包含類似的方法,所以上面的代碼和 RxJava 以及 Stream API很像。 但是由于 Android 工程師不能使用 Stream API,所以他們更多的使用的 RxJava 處理數據的方法來解決這個問題。然后,這種操作并不完全正確,原因在于:RxJava 是一個事件處理庫,而不是數據處理。所以你現在可以使用 Kotlin 來解決這個問題而不必擔心這些問題。

不可變集合

如果你對不可變對象(immutable object)感覺到很陌生的話,我們建議你先看完這個文檔 看完后,在看一下這個。

Kotlin區分可變對象(mutable object)和不可變對象(lists, sets, maps等等)的方法和其他編程語言不一樣。在使用Kotlin集合時準確區分這幾種兩種對象對于避免不必要的錯誤和 bug 都非常有用。

Kotlin允許像 Java 類似的寫法創建 Kotlin 的集合實例。

val list = ArrayList<String>()

這是最簡單和整潔的方法. 下面這種方法是最棒的寫法:

val list: kotlin.collections.List<String> = java.util.ArrayList()

我創建了一個kotlin.collections.List引用,同時我們也創建了一個不可變的集合。如果你不是很相信的話,那么我們可以看一下源碼:

public interface List<out E> : Collection<E> { // Query Operations override val size: Int override fun isEmpty(): Boolean override fun contains(element: @UnsafeVariance E): Boolean override fun iterator(): Iterator<E> // Bulk Operations override fun containsAll(elements: Collection<@UnsafeVariance E>): Boolean // Positional Access Operations /** * Returns the element at the specified index in the list. */ public operator fun get(index: Int): E // Search Operations /** * Returns the index of the first occurrence of the specified element in the list, or -1 if the specified * element is not contained in the list. */ public fun indexOf(element: @UnsafeVariance E): Int /** * Returns the index of the last occurrence of the specified element in the list, or -1 if the specified * element is not contained in the list. */ public fun lastIndexOf(element: @UnsafeVariance E): Int // List Iterators /** * Returns a list iterator over the elements in this list (in proper sequence). */ public fun listIterator(): ListIterator<E> /** * Returns a list iterator over the elements in this list (in proper sequence), starting at the specified [index]. */ public fun listIterator(index: Int): ListIterator<E> // View /** * Returns a view of the portion of this list between the specified [fromIndex] (inclusive) and [toIndex] (exclusive). * The returned list is backed by this list, so non-structural changes in the returned list are reflected in this list, and vice-versa. */ public fun subList(fromIndex: Int, toIndex: Int): List<E>}

你看到源碼中沒 add() 方法,也沒有 remove() 方法,同時也沒有其他的一些方法去改變這個集合。在這個例子中,實例本身是java.util.ArrayList。 下面我們來通過一個例子來解釋為什么:

val list: kotlin.collections.MutableList<String> = java.util.ArrayList()list.add("string")

你最好在本地的源碼中看這例子:

public interface MutableList<E> : List<E>, MutableCollection<E> { // Modification Operations override fun add(element: E): Boolean override fun remove(element: E): Boolean // Bulk Modification Operations override fun addAll(elements: Collection<E>): Boolean /** * Inserts all of the elements in the specified collection [elements] into this list at the specified [index]. * * @return `true` if the list was changed as the result of the operation. */ public fun addAll(index: Int, elements: Collection<E>): Boolean override fun removeAll(elements: Collection<E>): Boolean override fun retainAll(elements: Collection<E>): Boolean override fun clear(): Unit // Positional Access Operations /** * Replaces the element at the specified position in this list with the specified element. * * @return the element previously at the specified position. */ public operator fun set(index: Int, element: E): E /** * Inserts an element into the list at the specified [index]. */ public fun add(index: Int, element: E): Unit /** * Removes an element at the specified [index] from the list. * * @return the element that has been removed. */ public fun removeAt(index: Int): E // List Iterators override fun listIterator(): MutableListIterator<E> override fun listIterator(index: Int): MutableListIterator<E> // View override fun subList(fromIndex: Int, toIndex: Int): MutableList<E>}

怎樣理解:Java 的 ArrayList 是否和 Kotlin 的 List一樣?

val list: kotlin.collections.List<String> = java.util.ArrayList()

實際上,這里并沒有什么奇怪的地方. Kotlin 的集合繼承了 Java 的 List 的接口。我們可以從 kotlin.collections.Collection.kt 文件中看到:

@file:kotlin.jvm.JvmMultifileClass@file:kotlin.jvm.JvmName("CollectionsKt")package kotlin.collectionsimport kotlin.comparisons.compareValues

正如之前所提的,這個文件包含了所有的集合擴展方法。我們可以看到,我們在 Kotlin 中幾乎可以使用 Java CollectionsKT 類中的所有方法.當然,也需要導入 java.util.* 。

讓我們來看一下我們在 Java 代碼中怎么調用 Kotlin 集合:

java.util.List<Integer> list = kotlin.collections.CollectionsKt.listOf(3, 4, 5);java.util.List<Integer> filteredList = CollectionsKt.filter(list, item -> item > 4);

你現在可以很清楚的看到 Kotlin 集合是如何使用 Java 的 List 。所有擴展函數都可以作為靜態方法訪問。

總結

Android 開發語言 Kotlin 是一門非常有趣的語言。它能幫助我們編寫更加簡潔和安全的代碼。初次之外,Kotlin 與 Java 兼容。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到kotlin教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频一区二区三区四| 日韩国产精品亚洲а∨天堂免| 久久视频精品在线| 欧美日韩性视频| 久久在线免费观看视频| 精品动漫一区二区三区| 日韩av毛片网| 亚洲欧洲美洲在线综合| 欧美激情久久久久| 91精品国产一区| 日韩在线小视频| 亚洲a在线观看| 精品国产91久久久| 久久久欧美一区二区| 美女撒尿一区二区三区| 亚洲最大成人网色| 日韩极品精品视频免费观看| 久久人人爽人人爽人人片亚洲| 91精品久久久久久久久久久| 久久综合久久美利坚合众国| 欧美午夜片欧美片在线观看| 日韩成人中文字幕在线观看| 国产精品入口尤物| 日韩中文理论片| 亚洲精品www| 538国产精品一区二区免费视频| 久久久天堂国产精品女人| 久久久久国色av免费观看性色| 91亚洲一区精品| 中文字幕在线精品| 亚洲欧美中文日韩在线| 日韩第一页在线| 国产精品久久久久免费a∨| 国产成人精品免高潮在线观看| 欧美猛交ⅹxxx乱大交视频| 伊人男人综合视频网| 亚洲精品456在线播放狼人| 日韩中文字幕精品视频| 97高清免费视频| 91精品视频播放| 精品动漫一区二区| 国产丝袜一区二区三区免费视频| 欧美在线观看日本一区| 国产亚洲美女精品久久久| 91精品国产乱码久久久久久久久| 久久久97精品| 日本不卡高字幕在线2019| 欧美亚洲午夜视频在线观看| 91网在线免费观看| 欧美激情视频一区二区| 久久夜精品香蕉| 这里只有视频精品| 国内精品久久久久久| 97超级碰碰碰| 欧美午夜精品久久久久久人妖| 久久久久久久激情视频| 亚洲自拍偷拍区| 日韩有码片在线观看| 久久久久久久亚洲精品| 中文字幕在线亚洲| 91av在线播放| 日韩在线高清视频| 国产精品美女在线| 91美女片黄在线观| 欧美性极品xxxx做受| 成人欧美在线视频| 中文字幕在线观看亚洲| 精品久久久国产| 欧美日韩xxxxx| 日韩av中文在线| 久久成人在线视频| 久久久久久网站| 欧美日韩日本国产| 久久夜色撩人精品| 91人人爽人人爽人人精88v| 成人网址在线观看| 欧美极品美女视频网站在线观看免费| 中文字幕在线观看亚洲| 日韩国产精品亚洲а∨天堂免| 久久乐国产精品| 亚洲自拍小视频免费观看| 北条麻妃一区二区三区中文字幕| 亚洲欧美国产另类| 国产精品www网站| 亚洲美女在线视频| 欧美亚洲另类激情另类| 亚洲最大激情中文字幕| 国产婷婷色综合av蜜臀av| 国产精品九九九| 欧美日韩精品国产| 欧美性视频在线| 亚洲一级黄色av| 日韩在线视频免费观看高清中文| 久久久久久国产精品美女| 国产一区二区三区四区福利| 美女精品久久久| 91沈先生作品| 精品国产一区二区三区久久| 成年人精品视频| 81精品国产乱码久久久久久| 国产精品一二三在线| 蜜臀久久99精品久久久无需会员| 日韩在线国产精品| 欧美激情一区二区三区成人| 伊人久久大香线蕉av一区二区| 中文字幕亚洲欧美一区二区三区| www.亚洲男人天堂| 日韩欧美福利视频| 亚洲成人av在线| 欧美大荫蒂xxx| 欧美性猛交xxxx乱大交蜜桃| 国产精品视频久久| 91国内揄拍国内精品对白| 久久99视频免费| 日韩h在线观看| 久久久久久国产精品美女| 亚洲欧美在线x视频| 欧美亚洲伦理www| 精品香蕉一区二区三区| 久久韩国免费视频| 亚洲精品网站在线播放gif| 亚洲综合中文字幕在线| 中文字幕日韩精品有码视频| 国产视频久久久| 日韩欧美第一页| 亚洲激情中文字幕| 精品国产31久久久久久| 欧美精品18videos性欧| 午夜剧场成人观在线视频免费观看| 国产综合在线看| 自拍视频国产精品| 有码中文亚洲精品| 亚洲精品99久久久久中文字幕| 亚洲精品日韩av| 国产精品视频久久久| 精品无人区太爽高潮在线播放| 亚洲缚视频在线观看| 亚洲欧美日韩中文在线制服| 国内精品久久久久久久久| 中文综合在线观看| 清纯唯美日韩制服另类| 国产深夜精品福利| 一区二区成人av| 精品国产乱码久久久久酒店| 91精品国产网站| 亚洲专区中文字幕| 最近2019好看的中文字幕免费| 欧美激情一区二区久久久| 亚洲最大成人免费视频| 欧美在线精品免播放器视频| 国产精品网红福利| 欧美在线视频观看免费网站| 久久影院模特热| 91精品视频一区| 中文在线不卡视频| 曰本色欧美视频在线| 精品国产一区二区三区在线观看| 欧美国产高跟鞋裸体秀xxxhd| 亚洲精品女av网站| 色偷偷88888欧美精品久久久| 秋霞午夜一区二区| 色综合天天狠天天透天天伊人| 日韩欧美成人区| 精品亚洲一区二区|