数据类型

List集合

不可变List

  • getOrElse是一个安全索引取值函数,它需要两个参数,第一个是索引值,第二个是能提供默认值的lambda表达是,如果索引值不存在,可用来代替异常。
  • getOrNull是Kotlin提供的另一个安全索引取值函数,它返回null结果,而不是抛出异常。
fun main(){
    val list = listOf("a","b","c","d","e","f","g","h","i")
    println(list.getOrElse(100){"Unknow"})    //Unknow
    println(list.getOrNull(100))        //null
    println(list.getOrNull(100) ?: "Unknow2")        //Unknow2
}

可变列表

在Kotlin中,支持内容修改的列表叫可变列表,要创建可变列表,可以使用mutableListOf函数。List还支持使用toList和toMutableList函数动态实现只读列表和可变列表的相互转换

fun main(){
    val mutableList = mutableListOf("one","two","three","four","five","six")
    mutableList.add("seven")
    println(mutableList)    //[one, two, three, four, five, six, seven]

    val list = mutableList.toList()   //转为不可变列表
//    list.remove("four")   //报错,不可变List不支持修改

    val list2 = list.toMutableList()   //转为可变列表
    list2.remove("five")
    println(list2)     //[one, two, three, four, six, seven]
}

mutator函数

  • 能修改可变列表的函数有个统一的名字:mutator函数。例如add,remove。
  • 添加元素运算符与删除元素运算符(C++运算符重载)
  • 基于lambda表达式指定的条件删除元素
fun main(){
    val mutableList = mutableListOf("one","two","three","four","five","six")
    mutableList += "seven"     //mutableList.add("seven")
    println(mutableList)     //[one, two, three, four, five, six, seven]

    mutableList -= "one"   //remove
    println(mutableList)   //[two, three, four, five, six, seven]

    mutableList.removeIf{it.contains("seven")}  //如果包含seven删除seven
    println(mutableList)    //[two, three, four, five, six]
}

List遍历

fun main(){
    val list = mutableListOf("one","two","three","four","five")
    
    //1.forEach
    list.forEach { println(it) }
    
    //2.for
    for(i in list){println(i)}

    //3.forEachIndexed
    list.forEachIndexed { index, i ->
        println("$index -> $i")    
    }
}

解构

下划线_过滤掉不想要的赋值

fun main(){
    val list = mutableListOf("one","two","three","four","five")
    val (one,_,three) = list
    println("$one, $three")
}

Set集合

setOf

新建不可变set

mutableSet

可变集合

fun main(){
//    val set1 = setOf<Int>(1, 2, 3, 4, 1)
//    print(set1) //
//    println(set1.size)
//    print(set1.elementAt(2))

    val mutableSet = mutableSetOf(1,2,3,4,5)
    mutableSet.remove(3)
    mutableSet+=3
    println(mutableSet)
}

基本语法和List相似

集合转换

  • 把List转为Set,去掉重复元素
  • 快捷函数
fun main(){
    val list = listOf(1,2,3,4,5,2,3)
//    val list2 = list.toSet().toList()   //List去重  [1, 2, 3, 4, 5]
    val list3 = list.distinct()   //和上面等价  [1, 2, 3, 4, 5]
    println(list3)
}

数组类型

import java.io.File
fun main(){
    val intArray = intArrayOf(1,2,3,4,5)
    listOf(10,20,30).toIntArray()

    val fileArray = arrayOf(File("xxx"),File("yyy"))
}

map集合

map创建

to看上去像关键字,但事实上,它是个省略了点号和参数的特殊函数,to函数将它左边和右边的值转化成一对Pair。

mapOf(key to value,......)

fun main(){
    //1.to
    val map = mapOf("a" to 1, "b" to 2, "c" to 3)
    println(map)  //{a=1, b=2, c=3}

    //2.Pair
    val map2 = mapOf(Pair("a",1), Pair("b",2))
    println(map2)   //{a=1, b=2}
}

读取map的值

Map遍历

    map.forEach {
        println("${it.key},${it.value}")
    }

可变Map

通过mutableMapOf创建可变的Map

getOrPut键值不存在,就添加并返回结果,否则就返回已有键对应的值

fun main(){
    val mutablemap = mutableMapOf("a" to 1, "b" to 2)

    mutablemap += mutableMapOf("a" to 1, "b" to 2)
    println(mutablemap)  //{a=1, b=2}
    mutablemap.put("a",3)    //可改成  mutablemap["a"] = 3
    println(mutablemap)   //{a=3, b=2}

    mutablemap.getOrPut("d"){4}   
    println(mutablemap)  //{a=3, b=2, d=4}
}

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐