快速學習Kotlin(七)集合操作符

Kotlin

集合是我們在代碼編寫時常用的操作數(shù)據的方式之一,具有非常重要的作用。

在kotlin中也有集合的概念,kotlin中的集合一般有三種:List、Map以及Set三種。而這三種集合每種又可以分為可變集合與不可變集合兩種。

不可變集合

顧名思義,不可變集合就是集合在初始化時已經將元素放入集合當中去,之后只能對集合中的元素進行查看和遍歷,不能對其進行添加、修改和刪除。

        var list = listOf<String>("A","B","C","D");

        var set = setOf<String>("a","b","c","d","e");

        var map = mapOf<Int,String>(1 to "aa",2 to "bb",3 to "cc",4 to "dd",5 to "dd");

在kotlin中并沒有聲明為集合的函數(shù),所以我們不能像Java中那樣直接使用ArrayList或者HashMap這樣來聲明一個集合。而是應該改用listof、setof和mapof等方法來聲明一個集合。并且用這種方式聲明的集合都是不能變集合,我們在聲明的同時就在括號中將其初始值添加進去,之后便可以直接遍歷取出這些值。

可變集合

絕大多數(shù)情況下,我們在操作集合的時候都不是一層不變的,很多時候都是在對集合中的數(shù)據進行增刪改查,那么該如何操作呢?這個時候就必須使用到可變集合。

var list  = mutableListOf<String>();
    list.add("A");
    list.add("B");
    list.add("C");

    list.get(0);
    list.get(1)

    list.removeAt(0);

    var set  = mutableSetOf<Int>();
    set.add(1);
    set.add(2);

    set.remove(0);
    var size = set.size

    var map = mutableMapOf<Int,String>();
    map.put(1,"aa");
    map.put(2,"bb");
    var value = map.get(1)

當我們把集合聲明為mutableListOf、mutableSetOf和mutableMapOf時,集合就變成了一個可變集合。我們可以對集合進行像Java一樣增刪改查的操作。

此外如果你想對Map進行操作,kotlin也提供各種不同的map來進行數(shù)據的操作。

  • hashMapOf()——創(chuàng)建一個hashMap
  • linkedMapOf()——創(chuàng)建一個linkedMap
  • sortedMapOf()——創(chuàng)建一個sortedMap

另外在對可變集合在聲明的時候也可以進行初始化操作,如果不進行初始化則默認為一個空集合。

var list  = mutableListOf<String>("Q","W","E");

var set  = mutableSetOf<Int>(1,2,3,4);

var map = mutableMapOf<Int,String>(1 to "aa",2 to "bb");

集合的遍歷

有些時候我們會需要去取出集合中的所有元素,對不同元素進行不同的操作。這時候就需要對集合進行遍歷操作。下面列出集中集合遍歷的方式來提供參考。

  • list集合遍歷

    var list:List<String> = listOf<String>("a","b","c","d","e","f","g","h","i");
    var value:String;

    //第一種遍歷方式
    for (value in list){
        println("集合遍歷結果:$value");
    }

    //第二種遍歷方式
    list.forEach {
        println("集合遍歷結果:$it")
    }

    //遍歷結果
    集合遍歷結果:a
    集合遍歷結果:b
    集合遍歷結果:c
    集合遍歷結果:d
    集合遍歷結果:e
    集合遍歷結果:f
    集合遍歷結果:g
    集合遍歷結果:h
    集合遍歷結果:i

這兩種遍歷list集合輸出的結果都是一樣的。但是假設我們此時還需要同時輸出集合下角標和元素值,那么又當如何遍歷?這里寫出第三種遍歷方式,可以同時遍歷下角標和元素值

    var list:List<String> = listOf<String>("a","b","c","d","e","f","g","h","i");
    var value:String;

    for ((index,value) in list.withIndex()){
        println("角標為$index,元素值為$value");
    }

    //遍歷結果
    角標為0,元素值為a
    角標為1,元素值為b
    角標為2,元素值為c
    角標為3,元素值為d
    角標為4,元素值為e
    角標為5,元素值為f
    角標為6,元素值為g
    角標為7,元素值為h
    角標為8,元素值為i

看到,這里使用了解構的方式來遍歷整個集合,從而達到可以同時遍歷下角標和元素內容的目的。

  • Map集合遍歷

        var map:Map<String,String> = mapOf("1" to "a","2" to "b","3" to "c","4" to "d","5" to "e");

        //第一種遍歷集合方式
        map.forEach {

            println("集合的key為${it.key},集合的value為${it.value};");

        };

        //第二種解構遍歷集合方式
        for ((key,value) in map){

            println("集合的key為${key},集合的value為${value};");

        }

        //遍歷結果
        集合的key為1,集合的value為a;
        集合的key為2,集合的value為b;
        集合的key為3,集合的value為c;
        集合的key為4,集合的value為d;
        集合的key為5,集合的value為e;

操作符

熟悉RxJava的都知道,RxJava之所以強大的地方在于其擁有很多非常好用的操作符,這些操作符大大節(jié)約了我們編程的難度方便了我們的開發(fā)。在kotlin中集合里面也有很多操作符。下面我來列舉幾個常用的操作符。

  • any

說明:如果至少有一個元素符合判斷條件,則返回true,否則false,例:

val list = listOf(1, 2, 3, 4, 5)
list.any { it > 10 }

結果為false

  • all

說明:如果集合中所有的元素都符合判斷條件,則返回true否則false,例:

val list = listOf(1, 2, 3, 4, 5)
list.any { it < 10 }

結果為true

  • count

說明:返回集合中符合判斷條件的元素總數(shù)。例:

val list = listOf(1, 2, 3, 4, 5)
list.count { it <3 }

結果為2

  • forEach

說明:遍歷所有元素,并執(zhí)行給定的操作(類似于Java 中的for循環(huán))。例:

val list = listOf(1, 2, 3, 4, 5)
list.forEach{ Log.i(TAG,it.toString()) }

結果為:1 2 3 4 5

  • forEachIndexed

說明:與forEach作用一樣,但是同時可以得到元素的index。例:

val list = listOf(1, 2, 3, 4, 5)
list.forEachIndexed { index, i -> Log.i(TAG, "index:" + index + " value:" + i.toString()) }

結果為
index:0 value:1
index:1 value:2
index:2 value:3
index:3 value:4
index:4 value:5

  • drop

說明:返回去掉前n個元素的列表。例:

val list = listOf(1, 2, 3, 4, 5)
var s = list.drop(2)
s.forEach {
Log.i(TAG, it.toString())
}

結果為 :3 4 5(去掉了前兩個元素)

  • filter

說明:過濾所有符合給定函數(shù)條件的元素。例:

list.filter { it > 2 }

結果為:3 4 5

  • flatMap

說明:遍歷所有的元素,為每一個創(chuàng)建一個集合,最后把所有的集合放在一個集合中。例:

list.flatMap { listOf(it, it + 1) }

結果為: 1 2 2 3 3 4 4 5 5 6(每個元素都執(zhí)行加1后作為一個新元素)

  • map

說明:返回一個每一個元素根據給定的函數(shù)轉換所組成的集合。例:

list.map { it * 2 }

結果為:2 4 6 8 10

  • zip

說明:返回由pair組成的List,每個pair由兩個集合中相同index的元素組成。這個返回的List的大小由最小的那個集合決定。例:

list.zip(listOf(7, 8))

結果為:(1, 7) (2, 8)

  • first

說明:返回符合給定函數(shù)條件的第一個元素。例:

list.first { it > 2 }

結果為:3

  • last

說明:返回符合給定函數(shù)條件的最后一個元素。例:

list.last { it % 2 == 0 }

結果為:4
如果覺得我的文章能夠幫助到你,也歡迎關注我的微信公眾號「晨雨細曲」,有新技術和知識會推送在這上面。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 前言 人生苦多,快來 Kotlin ,快速學習Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,692評論 9 118
  • 集合是開發(fā)中非常常用的知識,比如操作各種數(shù)據集,各種算法,保存網絡請求結果,作為Adapter數(shù)據集,如果你不會集...
    Knight_Davion閱讀 16,345評論 1 22
  • 數(shù)組和集合 Kotlin為數(shù)組增加了一個Array類,因此可以用面向對象的語法使用數(shù)組。 Kotlin自己提供一套...
    JamFF閱讀 1,358評論 0 2
  • Google在今年的IO大會上宣布,將Android開發(fā)的官方語言更換為Kotlin,作為跟著Google玩兒An...
    藍灰_q閱讀 77,194評論 31 489
  • 哇塞 下班時間到 饑腸轆轆去食堂 排隊打飯又見大哥萌萌的笑臉 “我只要一兩米飯” “這些挺少的”,大哥端著二兩的米...
    羊小艾閱讀 162評論 0 1

友情鏈接更多精彩內容