Kotlin基础学习08

本文详细介绍了Kotlin中的集合操作,包括takeUnless函数、List的创建与元素获取、可变List与Set的转换、List遍历、解构语法以及集合转换与快捷函数。通过实例展示了如何安全地访问元素、修改集合、去重以及使用解构赋值。同时,文章涵盖了Kotlin中数组的常规操作和避免越界的方法。
摘要由CSDN通过智能技术生成

目录

1.Kotlin语言的takeUnless内置函数

2.Kotlin语言的List创建与元素获取学习

3.Kotlin语言的可变List集合学习

4.Kotlin语言的mutator学习

5.Kotlin语言的List集合遍历学习

6.Kotlin语言的解构语法过滤元素学习

7.Kotlin语言的Set创建与元素获取

8.Kotlin语言的可变Set集合

9.Kotlin语言的集合转换与快捷函数学习

10.Kotlin语中的数组类型


1.Kotlin语言的takeUnless内置函数

// TODO 55 Kotlin语言的takeUnless内置函数
// takeIf 和 takeUnless 功能是相反的
// name.takeIf {true / false} true : 返回name本身,false返回null
// name.takeUnless{true / false} false : 返回name本身,true返回null
class Manager{
    private var infoValue : String ?= null
    fun getInfoValue()/* : String? */ = infoValue
    fun setInfoValue(infoValue : String){
        this.infoValue = infoValue
    }
}
fun main() {
    val manager = Manager()
    manager.setInfoValue("AAA")
    //小结:takeUnless+it.isNullOrBlank()一起使用,可以验证字符串有没有初始化
    val r = manager.getInfoValue().takeUnless { it.isNullOrBlank() } ?: "未进行初始化"
    println(r)
}

2.Kotlin语言的List创建与元素获取学习

// TODO 56 Kotlin语言的List创建与元素获取学习
// 普通取值方式: 索引
// 防止崩溃取值方式: getOrElse getOrNull
fun main() {
    val list = listOf("Bxb","ZhangSan","Lisi","Wangwu")
    //普通取值方式
    println(list[0])
    println(list[1])
    println(list[2])
    println(list[3])
    println()
    //我们写KT代码,一定不会出现,空指针异常,下标越界异常
    //防止崩溃方式,getOrElse getOrNull
    println(list.getOrElse(3) { "你越界了0" })
    println(list.getOrElse(4) { "你越界了1" })
    println(list.getOrElse(5) { "你越界了2" })
    println()
    println(list.getOrNull(1))
    println(list.getOrNull(4))
    println(list.getOrNull(111))
    //getOrNull + 空合并操作符
    println(list.getOrNull(222) ?: "你越界了3")
    //小结:开发过程中,尽量使用getOrElse 或者 getOrNull,才能体现KT的两点
}

3.Kotlin语言的可变List集合学习

// TODO 57 Kotlin语言的可变List集合学习
// 可变的集合
// 不可变集合 to 可变集合
// 可变集合 to 不可变集合
fun main() {
    //可变的集合
    val list = mutableListOf("Bxb","Zhangsan","Wangwu")
    //可变的集合,可以完成可变的操作
    list.add("赵六")
    list.remove("Wangwu")
    println(list)
    // 不可变集合 to 可变集合
    val list2 = listOf(123,456,789)
    //不可变的集合,无法完成可变的操作

    val list3 : MutableList<Int> = list2.toMutableList()
    //可变的集合,可以完成可变的操作
    list3.add(111)
    list3.remove(123)
    println(list3)
    //可变集合 to 不可变集合
    val list4 : MutableList<Char> = mutableListOf('A','B','C')
    //可变的集合,可以完成可变的操作
    list4.add('Z')
    list4.remove('A')
    println(list4)
    //可变集合转变为不可变集合
    val list5 : List<Char> = list4.toList()
}

4.Kotlin语言的mutator学习

// TODO 58 Kotlin语言的mutator学习
//mutator   变化,改变
//1.mutator += -= 操作
//2.removeIf
fun main() {
    //1.mutator += -= 操作
    val list : MutableList<String> = mutableListOf("Bxb","BxbAll","BxbStr","Zhangsan")
    list += "李四"
    list += "王五"
    list -= "Bxb"
    println(list)
    //2.removeIf
    //list.removeIf{ true } 如果是true 自动遍历整个可变集合,进行一个元素一个元素的删除
    list.removeIf{ it.contains("Bxb")} //过滤所有的元素,只要有 Bxb 的元素,就是true 删除
    println(list)
}

5.Kotlin语言的List集合遍历学习

// TODO 59 Kotlin语言的List集合遍历学习
fun main() {
    val list = listOf(1, 2, 3, 4, 5, 6)

    println(list) //输出list详情,这个不是遍历集合

    //第一种 遍历方式:
    for (i in list){
        print("元素:$i    ")
    }
    println()
    //第二种 遍历方式:
    list.forEach{
        //it == 每一个元素
        print("元素:$it    ")
    }
    println()
    //第三种 遍历方式
    list.forEachIndexed { index, item ->
        print("下标:$index,元素:$item     ")
    }
}

6.Kotlin语言的解构语法过滤元素学习

// TODO 60 Kotlin语言的解构语法过滤元素学习
//1.集合配合解耦语法
//2.反编译看Java给三个变量赋值的代码
//3.解构屏蔽接收值
fun main() {
    val list: List<String> = listOf("张三", "李四", "王五")

    val (value1, value2, value3) = list
    println("value1:$value1,value2:$value2,value3:$value3")
    var (v1, v2, v3) = list
    v1 = "ok"
    println("v1:$v1,v2:$v2,v3:$v3")
    //用_内部可以不接受赋值,可以节约一点性能
    val (_, n2, n3) = list
    //_ 不是变量名,是用来过滤解构赋值的,不接收赋值给我
    println("n2:$n2,n3:$n3")
}

7.Kotlin语言的Set创建与元素获取

// TODO 60 Kotlin语言的Set创建与元素获取
//1.set 定义 不允许重复
//2.普通方式elementAt 会越界崩溃
//3.elementAtOrElse elementAtOrNull
fun main() {
    val set: Set<String> = setOf("123","456","123","789")
    println(set)
    //set[0] 没有这样的功能 去Set集合元素
    println(set.elementAt(0))
    println(set.elementAt(1))
    println(set.elementAt(2))
    println()
    //使用list 或 set 集合,尽量使用此方式,防止越界崩溃异常
    println(set.elementAtOrElse(0) { "越界了lelele" })
    println(set.elementAtOrElse(100) { "越界了lelele" })

    println(set.elementAtOrNull(0))
    println(set.elementAtOrNull(111))
    //OrNull + 空合并操作符  一起使用
    println(set.elementAtOrNull(88) ?: "yueyueyueyueyue")

}

8.Kotlin语言的可变Set集合

// TODO 62 Kotlin语言的可变Set集合
fun main() {
    val set : MutableSet<String> = mutableSetOf("123","456")
    set += "147"
    set += "258"
    set -= "456"
    set.add("bxb")
    set.remove("123")
    println(set)
}

9.Kotlin语言的集合转换与快捷函数学习

// TODO 63 Kotlin语言的集合转换与快捷函数学习
//1.定义可变list集合
//2.List转Set 去重
//3.List转Set 转 List 也能去重
//4.快捷函数去重 distinct
fun main() {
    val list : MutableList<String> = mutableListOf("bxb","bxb","bxb","www","wuwuwu") //list 可以重复元素
    println(list)
    //List 转 Set 去重
    val set = list.toSet()
    println(set)
    //List转Set 转 List 也能去重
    val set2 = list.toSet().toList()
    println(set2)
    //快捷函数去重distinct
    println(list.distinct()) //内部做了:先转变成 可变的 Set 集合 再转换成 List 集合
    println(list.toMutableSet().toSet()) //和上面代码等价
}

10.Kotlin语中的数组类型

// TODO 64 Kotlin语中的数组类型
fun main() {
    //1.intArrayOf 常规操作的越界崩溃
    val intArray = intArrayOf(1,2,3,4,5)
    println(intArray[0])
    println(intArray[1])
    println(intArray[2])
    println()
    //2.elementAtOrElse elementAtOrNull
    println(intArray.elementAtOrElse(0) { -1 })
    println(intArray.elementAtOrElse(100) { -1 })

    println(intArray.elementAtOrNull(0))
    println(intArray.elementAtOrNull(200))

    //OrNull + 合并空操作符 一起来使用
    println(intArray.elementAtOrNull(200) ?: "你越界了")
    println()

    //3.List集合转 数组
    val charArray = listOf('A','B','C').toCharArray()
    println(charArray)

    //4.arrayOf Array<File>
    val objArray = arrayOf(File("aaa"),File("bbb"))
    println(objArray)

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值