学习笔记-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} 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apollo-Kotlin 是一个为 Kotlin 开发者提供的用于与 GraphQL 服务进行交互的库。根据引用,在 ApolloClientConfig.kt 文件中定义了两个 ApolloClient 实例,分别对应两个不同的 GraphQL 服务端点。这些实例可以用于向服务端发送请求和获取响应的数据。 另外,根据引用,在 GraphqlApi.kt 文件中,我们可以看到两个 ApolloClient 实例的注入。这些实例可以在 fetchService1() 和 fetchService2() 方法中使用,用于调用相应的 GraphQL 服务端点。fetchService2() 方法中还包含了异常处理的代码,以便在发生异常时进行处理。 综上所述,Apollo-Kotlin 是一个用于与 GraphQL 服务进行交互的库,它提供了方便的 API 用于发送请求和获取响应的数据。通过定义 ApolloClient 实例,并将其注入到相关的类中,我们可以轻松地使用 Apollo-Kotlin 进行 GraphQL 开发。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Spring boot中apollo-kotlin基本使用(一个客户端使用多个graphql端点)](https://blog.csdn.net/fggdgh/article/details/128089362)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [Kotlin进阶指南 - Parcelable序列化](https://blog.csdn.net/qq_20451879/article/details/126250953)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值