IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 学习笔记-Kotlin(4) -> 正文阅读

[移动开发]学习笔记-Kotlin(4)

目录

集合

1.List

1.1.list创建与元素获取

1.2.mutator函数

1.3.集合遍历

1.4.结构

2.Set?

2.1.List和Set转换

3.Map

3.1.Map的创建

3.2.读取Map的值?

3.3.map遍历

3.4.可变集合、mutator、getOrPut

集合

List、Set和Map类型的变量分为两类。只读和可变?

1.List

1.1.list创建与元素获取

????????getOrElse是一个安全索引取值函数,它需要两个参数。第一个参数:索引值;第二个参数:能提供默认值的lambda表达式,如果索引值不存在,就用默认值来代替异常奔溃

????????getOrNull是另一个安全索引取值函数,如果不存在就会返回返回空,而不是抛出异常。

只读list用listOf函数,可写的list用mutableListOf函数

? ? ? ? kotlin支持使用toListtoMutableList函数动态实现只读列表可写列表的转换。

    fun listTest() {
        //只读
        var list = listOf("huahua","wangwang","jun")
        println(list.getOrElse(2) { "UnKnown" })
        println(list.getOrNull(2) ?: "UnKnown")
        var list2 = list.toMutableList();
        list2.remove("huahua")
        println(list)
        println(list2)

        //可写
        val mutableList = mutableListOf<String>("jack", "hua", "wang")
        println(mutableList.add("jun"))
        println(mutableList.remove("jack"))
        println(mutableList)
    }

运行结果:jun
????????????????jun
????????????????[huahua, wangwang, jun]
????????????????[wangwang, jun]
????????????????true
????????????????true
????????????????[hua, wang, jun]?

1.2.mutator函数

? ? ? ? 能修改可变列表的函数统一名称为:mutator函数。与java不同的是kotlin可以使用+=-=直接操作list,来实现增加、删除元素。可以基于lambda表达式指定条件删除元素:removeIf

    fun mutatorTest() {
        //能修改可变列表的函数统一名称:mutator函数
        val mutableList = mutableListOf<String>("jack", "hua", "wang")
        mutableList += "cheng"
        mutableList -= "hua"
        mutableList.removeIf {
            it.contains("wang")
        }
        println(mutableList)
    }

运行结果:[jack, cheng]

1.3.集合遍历

? ? ? ? for in遍历 一个参数:item

? ? ? ? forEach遍历 一个参数:item

? ? ? ? forEachIndexed遍历 两个参数:1.index 2.item

    fun forListTest() {
        val mutableList = mutableListOf<String>("jack", "hua", "wang")
        for(s in mutableList) {
            print("${s},")
        }
        println()
        mutableList.forEach{
            print("${it},")
        }
        println()
        mutableList.forEachIndexed { index, s ->
            print("${index}:${s},")
        }
    }

运行结果:jack,hua,wang,
????????????????jack,hua,wang,
????????????????0:jack,1:hua,2:wang,?

1.4.结构

    fun jiegouTest() {
        val (origin, _, dest) = mutableListOf("jack", "hua", "wang")
    }

? ? ? ? _下划线表示不要此变量,就不会去声明了。字节码中可以看到:

   public final void jiegouTest() {
      List var3 = CollectionsKt.mutableListOf(new String[]{"jack", "hua", "wang"});
      boolean var5 = false;
      String var1 = (String)var3.get(0);
      var5 = false;
      String dest = (String)var3.get(2);
   }

? ? ? ? 其中没有对下划线进行一个初始化和声明

2.Set?

????????和list相似。不同点java和kotlin相同,set无法有相同元素,list可以有相同元素。

? ? ? ? 和list相似的方法就不多说了 如:setOf、mutableSetOf和mutator等等函数。

    fun setTest() {
        //只读
        val set1 = setOf<String>("jack","wang","hua")
        println(set1)
        //可写
        val set2 = mutableSetOf<String>("jack","jun","wang")
        set2 += "hua"
        set2 -= "jack"
        println(set2)
    }

运行结果:?[jack, wang, hua]
????????????????[jun, wang, hua]

2.1.List和Set转换

? ? ? ? list.toSet()转换成Set,同时去除重复元素

? ? ? ? set.toList()转换成list

? ? ? ? 有时我们就是想要List,只是想要去除重复而已。初学者的我想到的是list.toSet().toList(),笑死了,这样太不好看了,kotlin有一个list.distinct()函数,去除重复。相信会数据库的小伙伴,知道distinct的含义了。

    fun list2set() {
        val mutableListOf = mutableListOf<String>("jack", "jack", "hua")
        println("mutableListOf: $mutableListOf")
        println("mutableListOf to set: ${mutableListOf.toSet()}")
        println("mutableListOf distinct: ${mutableListOf.distinct()}")
    }

运行结果:mutableListOf: [jack, jack, hua]
????????????????mutableListOf to set: [jack, hua]
????????????????mutableListOf distinct: [jack, hua]?

3.Map

3.1.Map的创建

? ? ? ? mapOf、mutableMapOf 有了上边的例子大家应该就知道它俩的作用了,前者是可读,后者是可写。

mapOf("jack" to 20, "hua" to 10)

? ? ? ? ?to看上去是关键字,但事实上是省略了点号和参数的特殊函数,to将它左边和右边的值转换成一对Pair,看到下边的例子,你就能理解了。

mapOf(Pair("jack", 20), Pair("hua", 10))

? ? ? ? 这两者是相同的

3.2.读取Map的值?

? ? ? ? []:读取键对应的值

? ? ? ? getValue:读取键对应的值,不存在抛出异常

? ? ? ? getOrElse:读取键对应的值,不存在使用匿名函数返回的默认值

? ? ? ? getOrDefault:读取键对应的值,不存在返回默认值

    fun getMapValue() {
        val mapOf1 = mapOf("jack" to 28, "hua" to 24, "wang" to 24)
        println("[]: ${mapOf1["jack"]}")
        println("getValue : ${mapOf1.getValue("hua")}")
        println("getOrElse : ${mapOf1.getOrElse("jun"){"Unknown"}}")
        println("getOrDefault : ${mapOf1.getOrDefault("cheng", "lala")}")
    }

运行结果:?[]: 28
????????????????getValue : 24
????????????????getOrElse : Unknown
????????????????getOrDefault : lala

3.3.map遍历

    fun forEachMap() {
        val mapOf1 = mapOf("jack" to 28, "hua" to 24, "jun" to 23)
        mapOf1.forEach{
            print("${it.key}:${it.value}|")
        }
        println()
        mapOf1.forEach { (key, value) ->
            print("${key}:${value}|")
        }
    }

运行结果:jack:28|hua:24|jun:23|
????????????????jack:28|hua:24|jun:23|?

? ? ? ? 两个foreach在于,我们有没有给其变量名,没有给编译器给我们提供了it表示当前项。

3.4.可变集合、mutator、getOrPut

? ? ? ? 可变集合用mutableMapOf前面说过了,mutator函数对于map来讲也是可以使用操作的,其中getOrPut说一说:它也是获取当前键对应的值,但是如果所get的键不存在就添加进map中。

    fun mutableMapTest() {
        val mapOf1 = mutableMapOf("jack" to 28, "hua" to 24, "wang" to 24)
        mapOf1 += "cheng" to 28
        mapOf1 -= "hua"
        mapOf1.put("zhang", 31)
        println(mapOf1)
        mapOf1.getOrPut("li", {90})
        println(mapOf1)
    }

运行结果:{jack=28, wang=24, cheng=28, zhang=31}
????????????????{jack=28, wang=24, cheng=28, zhang=31, li=90}?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 12:16:34  更:2022-04-29 12:17:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 23:37:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码