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集合

最新文章

  1. C# 单例模式
  2. 第7章 权限管理(3)_文件系统属性和sudo权限
  3. java-数字类
  4. 安装redis,执行make test时遇到You need tcl 8.5 or newer in order to run the Redis test
  5. 微软自带的Serialization和Newtonsoft简单测试
  6. MVC中的JS和CSS压缩
  7. ASP.NET 让无码编程不在是梦 -.NET通用平台、通用权限、易扩展、多语言、多平台架构框架
  8. SQL Server跨库复制表数据错误的解决办法
  9. econ
  10. 二模 (8) day1
  11. geeksforgeeks@ Sorting Elements of an Array by Frequency (Sort)
  12. 大脑皮层是如何工作的 《人工智能的未来》(&lt;On intelligence&gt;)读书笔记
  13. 重拾php---以及zend-studio 的使用快捷方式
  14. IntelliJIDEA Getting+Started+with+Spring+MVC,+Hibernate+and+JSON
  15. BZOJ 1040: [ZJOI2008]骑士 [DP 环套树]
  16. Chromium被用于Microsoft Edge与ChakraCore的未来【译】
  17. ES6的 let const 以及块级作用域
  18. How to Preloading content with rel preload
  19. &lt;7&gt;Lua类的表的实例创建
  20. ecplise中修改reviewboard密码

热门文章

  1. SpringBoot(17)---SpringBoot整合RocketMQ
  2. WebFlux 集成 Thymeleaf 、 Mongodb 实践 - Spring Boot(六)
  3. HBase 学习之路(十一)—— Spring/Spring Boot + Mybatis + Phoenix 整合
  4. Solr 18 - 通过SolrJ局部更新Solr中的文档 (原子操作、非覆盖操作)
  5. package.json 详解
  6. wireshark数据包分析实战 第三、四章
  7. WIFI密码破解全攻略
  8. flume1.9 用户指南(中文版)
  9. 转: windows系统下mysql出现Error 1045(28000) Access Denied for user &#39;root&#39;@&#39;localhost&#39;
  10. MyBatis select标签的用法