List,Set,Map都是集合

  • List 是一个有序集合,可通过索引(反映元素位置的整数)访问元素。元素可以在 list 中出现多次。列表的一个示例是一句话:有一组字、这些字的顺序很重要并且字可以重复。
  • Set 是唯一元素的集合。它反映了集合(set)的数学抽象:一组无重复的对象。一般来说 set 中元素的顺序并不重要。例如,字母表是字母的集合(set)。
  • Map(或者字典)是一组键值对。键是唯一的,每个键都刚好映射到一个值。值可以重复。map 对于存储对象之间的逻辑连接非常有用,例如,员工的 ID 与员工的位置。

创建集合

一般使用标准库中的方法来快速创建集合, listOf()、setOf()、mutableListOf()、mutableSetOf()

当然,也可以使用Java的集合的构造方法

val numbers = listOf(0,1,2,3,4)

空集合:emptyList()、emptySet() 与 emptyMap(),需要指定类型

val empty = emptyList<String>()

取集合一部分

slice

val numbers = listOf(0,1,2,3,4)
//按顺序取
println(numbers.slice(1..3))//[1,2,3]
//按步长取
println(numbers.slice(0..4 step 2))//[0,2,4]
//取指定下标
println(numbers.slice(setOf(3, 4, 0)))//[3,4,0]

take 取n个元素

  • take(n: Int) 从数组中按顺序取n个元素
  • takeLast(n: Int) 取末尾n个元素
  • takeWhile{expresstion} 一直取,不满足条件就停止
  • takeWhileLast{expresstion} 从后面取,不满足条件就停止
val numbers = listOf(0,1,2,3,4)
println(numbers.take(3))//[0,1,2]
println(numbers.takeLast(3))//[2,3,4]
val numbers = listOf("one", "two", "three", "four", "five", "six")
println(numbers.takeWhile { !it.startsWith("three") })//[one,two]
println(numbers.takeLastWhile { !it.startsWith("three") })//[four, five, six]

drop

  • drop(n: Int) 丢弃数组n个元素
  • dropLast(n: Int) 丢弃数组末尾n个元素
  • dropWhile{expresstion} 一直丢,不满足条件就停止
  • dropWhileLast{expresstion} 从后面丢,不满足条件就停止
val numbers = listOf(0,1,2,3,4)
println(numbers.drop(3))//[3,4]
println(numbers.dropLast(3))//[0,1]
val numbers = listOf("one", "two", "three", "four", "five", "six")
println(numbers.dropWhile { !it.startsWith("three") })//three, four, five, six
println(numbers.dropLastWhile { !it.startsWith("three") })//[one, two, three]

filter

  • filter{experssion} 取满足条件的元素
  • filterNot{experssion} 取不满足条件的元素
  • filterIndexed{experssion} 如果条件中需要使用下标值,则使用这个方法
  • filterIsInstance<类型>() 元素是否为某个类型
val numbers = listOf("one", "two", "three", "four", "five", "six")
val longerThan3 = numbers.filter { it.length > 3 }
println(longerThan3)//[three,four,five]
val numbers = listOf("one", "two", "three", "four")
val filteredIdx = numbers.filterIndexed { index, s -> (index != 0) && (s.length < 5) }
println(filteredIdx)//[two,four]
val numbers = listOf(null, 1, "two", 3.0, "four")
//这里只获得list中的String类型数据
println(numbers.filterIsInstance<String>())//[two,four]

partition 分组

val numbers = listOf(2,3,4,5,6)
//上一节类中说过的数据类自动解析,match是满足,rest则是不满足
val (match, rest) = numbers.partition { it%2==0}
println(match)
println(rest)

检验数组是否满足条件

  • any{expression} 数组中有任意一个元素满足条件,返回true
  • none{expression} 数据中没有一个元素满足条件,返回true
  • all{expression} 数组中全部元素满足条件,返回true
val numbers = listOf("one", "two", "three", "four")
println(numbers.any { it.endsWith("e") })
println(numbers.none { it.endsWith("a") })
println(numbers.all { it.endsWith("e") })

取某个元素

  • [index] list也可以使用
  • get(index) 平常方法
  • elementAt(index) 新增的方法
  • find{} 找到某个满足条件的第一个元素
  • findLast{} 找到满足条件的最后一个元素
  • random() 取随机

聚合操作

  • min() 最小
  • max() 最大
  • average() 平均
  • sum() 求和
  • count() 计数

排序

  • sort() 升序
  • sortDescending() 降序

参考

Kotlin集合

Kotlin学习快速入门(4)——集合使用的更多相关文章

  1. Kotlin学习快速入门(7)——扩展的妙用

    原文地址: Kotlin学习快速入门(7)--扩展的妙用 - Stars-One的杂货小窝 之前也模模糊糊地在用这个功能,也是十分方便,可以不用继承,快速给某个类增加新的方法,本篇便是来讲解下Kotl ...

  2. Kotlin学习快速入门(1)——基本数据类型以及String常用方法使用

    本文适合有Java基础的人 Kotlin语法特点 相比java,省略括号,可以自动判断类型,省略new关键字,空指针捕获 主函数 kotlin文件(kt文件)中,只有要下列的方法,就可以运行,无需像之 ...

  3. Kotlin学习快速入门(2)——条件 数组 循环 方法

    条件 if条件判断 常用的判断和Java一样,这里提一下不同的用法 1.if可以作为三元运算符 val max = if (a > b) a else b 2.使用in判断是否在某个区间 val ...

  4. Kotlin学习快速入门(3)——类 继承 接口

    类 参考链接 类定义格式 使用class关键字定义,格式如下: class T{ //属性 //构造函数 //函数 //内部类 } Java Bean类 java bean类 //java bean类 ...

  5. Kotlin学习快速入门(5)——空安全

    介绍 kotlin中,对象可分为两种类型,可为空的对象和不可为空对象 默认为不可为空对象,代码检测如果发现不可为空对象赋予了null,则会标红报错. 可为空的对象,如果调用了方法,代码检测也会标红报错 ...

  6. pytest学习--快速入门

    一.pytest简介 Pytest是python的一种单元测试框架. pytest的特点: 入门简单,文档丰富 支持单元测试,功能测试 支持参数化,重复执行,部分执行,测试跳过 兼容其他测试框架(no ...

  7. pytorch入门--土堆深度学习快速入门教程

    工具函数 dir函数,让我们直到工具箱,以及工具箱中的分隔区有什么东西 help函数,让我们直到每个工具是如何使用的,工具的使用方法 示例:在pycharm的console环境,输入 import t ...

  8. 大数据技术之_09_Flume学习_Flume概述+Flume快速入门+Flume企业开发案例+Flume监控之Ganglia+Flume高级之自定义MySQLSource+Flume企业真实面试题(重点)

    第1章 Flume概述1.1 Flume定义1.2 Flume组成架构1.2.1 Agent1.2.2 Source1.2.3 Channel1.2.4 Sink1.2.5 Event1.3 Flum ...

  9. MongoDB学习(五)使用Java驱动程序3.3操作MongoDB快速入门

    [引言] 毕竟现在MongoDB还是出于成长阶段,所以现在网上相关的资料很少,而且大部分还都是针对于MongoDB的老版本的.再加上MongoDB的频繁升级.重大更新等等,导致菜鸟学习的难度增大. 好 ...

随机推荐

  1. 零基础搭建appium自动化环境

    目录 1.关键概念 2.安装过程 2.1.安装nodejs 2.2.安装appium 2.3.安装Android SDK 2.4.安装模拟器 2.5.安装Python3 2.6.安装appium Cl ...

  2. 先订一个小目标,把微信小程序搞懂

    目标:系统性学习微信小程序. 第一阶段:熟悉微信小程序及前端开发(结合web前端学习) 第二阶段:了解设计及后端 第三阶段:学习后端.

  3. CI框架注意

    1.在ci框架中,如果想继承自己写的控制器,从而不继承CI_Controller,可以在application/core中定义控制器,从而就可以在controllers中的控制器继承. 2.在ci框架 ...

  4. springboot+redis+Interceptor+自定义annotation实现接口自动幂等

    前言: 在实际的开发项目中,一个对外暴露的接口往往会面临很多次请求,我们来解释一下幂等的概念:任意多次执行所产生的影响均与一次执行的影响相同.按照这个含义,最终的含义就是 对数据库的影响只能是一次性的 ...

  5. 并发编程-concurrent指南-阻塞队列-链表阻塞队列LinkedBlockingQueue

    LinkedBlockingQueue是一个基于链表的阻塞队列. 由于LinkedBlockingQueue实现是线程安全的,实现了先进先出等特性,是作为生产者消费者的首选. LinkedBlocki ...

  6. 并发编程-concurrent指南-阻塞队列BlockingQueue

    阻塞队列BlockingQueue,java.util.concurrent下的BlockingQueue接口表示一个线程放入和提取实例的队列. 适用场景: BlockingQueue通常用于一个线程 ...

  7. JAVA写入大文件DEMO

    /**     * 读取filePath的文件     * @param filePath    文件的路径     * @return     List集合       文件中一行一行的数据     ...

  8. 安装Eclipse for MAC 苹果版

    1. 安装Eclipse for MAC 苹果版 2. Thank you for downloading Eclipse If the download doesn't start in a few ...

  9. 【linux杂谈】在SSH连接中,openssh如何解决'Connection refused'错误?

    openssh是SSH (Secure SHell) 协议的免费开源实现.SSH协议族可以用来进行远程控制, 或在计算机之间传送文件. 这就意味着远程登陆,文件推拉特别是搭建集群后公钥的部署,经常要利 ...

  10. Egret入门学习日记 --- 第四篇

    第四篇(学习篇) 好了,今天继续把昨天的问题解决了. 今天见鬼了. 现在界面又出来了.唯一我动过的地方,应该就是这里: 是的,我点了一下刷新.之后,不管我怎么创建新的EXML文件,放在src目录,还是 ...