zoukankan      html  css  js  c++  java
  • 解构声明与可变集合详解

    解构声明:

    在上一次https://www.cnblogs.com/webor2006/p/11519460.html对Kotlin的解构声明进行了学习, 这里继续还是学习解构声明在集合中的应用:

    其中to是一个中缀表达式:

    接下来遍历该map有多少方式,这里用解构声明的方式,如下:

    可见是多么的简洁,对于map中的值如果我们想每个都做一些修改,这里可以用这个函数,如下:

    可见是接收一个Lambda表达式,下面先看一下该函数的定义:

    所以咱们可以这样写:

    接下来应用一下解构声明:

    貌似我们并没有用key嘛,所以,可以进一步简化:

    其实Kotlin允许我们为解构声明整体指定类型,也就是如下:

    也可以为每一个具体的component指定类型,如下:

    所以,对于解构声明在实际中的用处还是挺多的。

    可变集合:

    在Kotlin中是严格区分可变集合和不可变集合的,要清楚的一点是:区分开可变集合的只读视图与实际上真正的不可变集合。下面来看个例子:

    接下来构建一个只读视图:

    那打印结果会是啥呢?运行一下:

    接下来再看一个操作:

     

    但是如果将readOnlyView的类型声明去掉就可以了:

    很明显此时的readOnlyView变成了可变集合了,所以从这一点就可以证明在Kotlin是严格区分可变集合与不可变集合的,对于不可以集合List,很显然也不支持添加元素:

    那List和MutableList在定义上有啥区别呢,看一下它们的定义就知道了:

    其中可以发现它的泛型定义是用的协变:

    所以这也是跟Java不同的,跟List类似,像Map也有对应的可变,如:

    好,下面再用一下其它集合:

    只读类型是协变的,因为它只用于从集合中获取数据,而不会修改集合中的数据,下面看下程序:

    接下来再看一下快照的概念:

    基中的toList扩展方法只是复制原集合中的元素,所以返回的集合就可以确保不会发生变化,下面看一下toList()方法的定义:

    而toMutableList则是创建了一个新对象,如下:

    所以说对于源数据的修改是不会反馈到这个toList()的集合当中的。

  • 相关阅读:
    Python学习记录——Ubuntu(四)计划任务、grep、正则表达式、sed、awk
    Python学习记录——Ubuntu(三)文件操作
    Python学习记录——Ubuntu(二)用户和用户组、环境变量
    Python学习记录——Ubuntu(一)基本配置、快捷键和系统启停命令行
    【转】Pycharm常用快捷键
    Python学习记录——文件操作
    闭包详解
    关于django中前端表单提交那点事
    Django+celery+redis 异步发送邮件功能
    Nginx
  • 原文地址:https://www.cnblogs.com/webor2006/p/11520614.html
Copyright © 2011-2022 走看看