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学习-集合和序列(3) -> 正文阅读

[移动开发]Kotlin学习-集合和序列(3)


前面两篇我们学习了 Kotlin 学习-基础语法(1)Kotlin学习-函数的定义和调用(2)

这次来看下kotlin中的集合和序列。

1.集合

1.1 集合的写法

首先我们来看下kotlin中集合的几种写法,如下:

private fun testList() {
    val list1 = listOf(1, 2, 3)
    val list2 = mutableListOf(4, 5, 6)

    println("list1 = $list1")
    println("list2 = $list2")
}
>>> list1 = [1, 2, 3]
>>> list2 = [4, 5, 6]

上面的listOf() 表示不可变的列表, mutableListOf()表示可变的列表。在kotlin中,集合listmapset都有两种写法,可变和不可变。

1.2 集合的函数式API

  • filtermap
    filter:可以移除不想要的元素。起过滤的作用
    map:可以把每一个元素给映射到另一个新集合中。起变换的作用
    我们看一个例子:
fun testApi(){
    listOf(1, 2, 3, 4)
        .map {
            println("item1 = $it")
            it * it
        }.filter {
            println("item2 = $it")
            it > 4
        }
}
>>>item1 = 1
item1 = 2
item1 = 3
item1 = 4
item2 = 1
item2 = 4
item2 = 9
item2 = 16

从上面的例子可以看出filtermap的作用,很方便的做集合进行操作。但也可以看出来,上面的两个日志将list都执行了一遍,有点没有必要,我们调整下顺序再看下。

fun testApi2(){
    listOf(1, 2, 3, 4)
        .filter {
            println("item1 = $it")
            it > 3
        }.map {
            println("item2 = $it")
            it * it
        }
}
>>>item1 = 1
item1 = 2
item1 = 3
item1 = 4
item2 = 4

可以看到将filter放到前面,map放到后面执行,最后map只执行了一次。
由此可见,合理的编写代码的顺序是可以提高程序性能的。

  • all,any,find,count
    上面说过了常用的mapfilter,这里再简单的介绍下allanyfindcount
    all:判断所有元素是否都满足条件;
    any:是否至少有一个元素满足条件;
    find:找到一个满足条件的元素就返回;
    count:有多少个元素满足条件;

看下下面的例子执行可以更直观的理解:

fun testApi3(){
    val list = listOf(1, 2, 3, 4)

    println("test all: ${list.all { it >3 }}")
    println("test any: ${list.any { it > 3 }}")
    println("test find: ${list.find { it > 3 }}")
    println("test count: ${list.count { it > 3 }}")
}
>>>test all: false
test any: true
test find: 4
test count: 1

以上的api灵活的使用可以大大的提高你的开发速度。

2.序列

kotlin中除了集合外还有一种惰性集合:序列。
有了集合为什么还要设计序列呢,他们有什么不同呢,可以看这位大神的文章,让你迷惑的 Kotlin 代码,再来一道~

我们这里只介绍下这个序列到底咋回事。kotlin的惰性集合入口是Sequence接口,表示的是一个可以逐个列举元素的元素序列,我们先用一个例子看下:

fun testSequence() {
    listOf(Person("Jay", 20),
        Person("Tom", 30),
        Person("Carry", 40))
        .asSequence()
        .map {
            println("map, $it")
            it.age
        }.filter {
            println("filter, $it")
            it > 30
        }
}
>>> 啥也没输出

搞完代码一看啥也没输出,这是什么玩意,哪里出错了???看了下官方文档,发现将序列重新转为集合才会触发这个序列的执行,来试试。

fun testSequence() {
    val toList = listOf(
        Person("Jay", 20),
        Person("Tom", 30),
        Person("Carry", 40)
    )
        .asSequence()
        .map {
            println("map, $it")
            it.age
        }.filter {
            println("filter, $it")
            it > 30
        }.toList()
    println("toList: $toList")
}
>>>map, Person(name=Jay, age=20)
filter, 20
map, Person(name=Tom, age=30)
filter, 30
map, Person(name=Carry, age=40)
filter, 40
toList: [40]

从日志打印可以印证序列的定义:可以逐个列举元素的元素序列
那既然最后的结果和集合是一样的,为什么要设计序列呢?
首先,我们看下官方序列的适应场景:需要对一个大型集合执行链式操作时要使用序列。集合的每步操作会创建中间集合,如果集合比较大,那么中间集合的重新分配会消耗巨大,影响执行性能。

3.集合和序列的区别

通过上面的集合和序列的了解,不难看出它们的区别。下面画张图形象的看下:
集合和序列的区别
到这里我们kotlin的集合和序列的介绍就结束了,具体的应用场景还需要结合自己的项目去使用最适合的。学无止境,继续搬砖吧。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 11:16:17  更:2021-09-06 11:18:37 
 
开发: 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/23 16:30:39-

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