Kotlin---集合與遍歷

weixin_33912246發表於2018-11-01

介紹

同樣在Kotlin中會有List、Map、Set,而與Java中資料結構大多相同,也略有區別。Kotlin中的集合分為可變集合與不可變集合。

List及其遍歷

Kotlin的List<E>介面只提供了sizegetindexOf等介面。所以我們在寫程式碼之前需要先知道這個List使用的時候會變還是不會變。

建立可變與不可變的List

在Kotlin中都是通過標準庫來建立集合類,例如:

  • 建立可變List:通過mutableListOf(),返回MutableList物件
  • 建立不可變List:通過listOf(),返回List介面
class TestKotlin {

    fun function() {
        // 建立MutableList可以繼續新增修改元素
        var mutableList: MutableList<Int> = mutableListOf(1, 2)
        mutableList.add(3)
        mutableList.remove(4)
        // 建立List不能新增和刪除只能遍歷
        var immutableList: List<Int> = listOf(1, 2)
    }
}

List的遍歷

在Kotlin中的遍歷和Groovy一樣,都可以使用foreach閉包來完成,也可以使用in關鍵字來實現

class TestKotlin {

    fun function() {
        var mutableList: MutableList<Int> = mutableListOf(1, 2, 3, 4)
        mutableList.forEach {
            println("Mutable List Elements:$it")
        }

       var mutableList: MutableList<Int> = mutableListOf(1, 2)
        for (value in mutableList) {
            print("value:$value")
        }
    }
}

而過濾List中的部分資料也可以通過閉包來實現,通過filter,我們過濾了小於1的元素。而通過first,我們會找到第一個等於3的元素。

class TestKotlin {

    fun function() {
        var mutableList: MutableList<Int> = mutableListOf(1, 2, 3, 4)
        var filtedList: List<Int> = mutableList.filter {
            it > 1
        }
        var first = mutableList.first {
            it == 3
        }
    }
}

在Kotlin的閉包中,可以使用很多方式來指定引數,如果沒有指定引數的話,預設會有一個it引數來代表閉包的引數。也就是我們也可以使用下面的方式來指定引數的名稱。這也和Groovy一樣。
var filtedList: List<Int> = mutableList.filter { element ->
element > 1
}

而對於排序我們可以通過指定comparator來完成

class TestKotlin {

    fun function() {
        var mutableList: MutableList<Int> = mutableListOf(1, 2, 3, 4)
        mutableList.sortWith(comparator = Comparator { x, y ->
            x - y
        })
    }
}

Map建立以及遍歷

Map的建立以及訪問、遍歷和List有一些區別。

對於Map的建立可以通過to關鍵字來完成Key-Value的配對。而遍歷可以使用forEach的方式,也可以通過in關鍵字來完成遍歷

class TestKotlin {

    fun function() {
        var mutableMap: MutableMap<Int, String> = mutableMapOf(1 to "one", 2 to "two", 3 to "three")
        mutableMap.forEach {
            print("key:${it.key}...value:${it.value}")
        }
        for ((key, value) in mutableMap) {
            print("Key:$key....Value:$value")
        }
    }
}

而訪問Map中的Key或者Value則可以類似於Python中字典的形式訪問

class TestKotlin {

    fun function() {
        var mutableMap: MutableMap<Int, String> = mutableMapOf(1 to "one", 2 to "two", 3 to "three")
        print(mutableMap[1])
    }
}

Set建立以及遍歷

List建立差不多,Set的建立與遍歷、過濾如下

class TestKotlin {

    fun function() {
        var mutableSet: MutableSet<Int> = mutableSetOf(1, 2, 3)
        var immutableSet: Set<Int> = hashSetOf(1, 2, 3)
        mutableSet.forEach {
            println("$it")
        }
    }
}

相關文章