Kotlin集合—集合类型共性和操作
代码:
package com.init.demo.collection/** * 集合类型Collection * Kotlin本身就提供了一组非常良好的原生集合类型接口,分为几下几种; * • Iterable:这是父类(class),意思是可迭代的、可被重复操作的(这里我们提前讲到类(class), * 你现在可以将类理解为函数与变量的组合, * 并用了个名字来代表。Iterable就是类名,类可以像基因一样被继承、繁衍而产生多样化的子类)。 * 任何继承了此接口的类,都意味着实现了一个其中元素可以被选代(重复操作)的序列。 * • Mutablelterable:支持在迭代过程中移除自身元素的lterable。 * • Collection:此类代表了一组元素的通用集合。我们可以通过各种函数来访问集合, * 如返回集合大小、是否为空、是否包含某个元素或一组元素。所有这些对集合的操作仅仅是请求数据, * 因为集合类型是不可变的(immutable)。 * • MutableCollection:一个支持添加和移除自身元素的Collection,它提供了额外的功能,如add、remove或clear等。 * • List: Array主角光环下被掩盖了,其实List也是一样的功能。 * 没错,虽然用得最多,可就是主角Array的替身,毕竟各种其他编程语言大多以Array为标准名称, * 因为是排序了的,我们可以通过位置(索引)请求对应的元素,使用get函数或快捷的下标中括号方法。 * • MutableList:尴尬的是主角Array并没有搭配一个Mutable小老弟。所以MutableList登场了,顾名思义, * 是一个支持添加和移除元素的List。 * • Set:一个无序的,但其中元素并不重复的集合。 * • MutableSet:一个支持添加和删除元素的Set。 * • Map:键值对(Key-valuePair)的集合。 * 其中的键具有唯一性,也就是说一个map里不能有两个一样的键(key)。 * • MutableMap:一个支持添加和移除元素的Map。 */ fun main(args: Array<String>) {//聚合系列:any 只要其中一个元素满足判断条件 val list = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9)println(list.any { it % 2 == 0 })println(list.any { it > 6 })//聚合系列:all 所有元素满足条件 println(list.all { it % 2 == 0 })println(list.all { it < 6 })//聚合系列:count 返回匹配条件的元素数目 println(list.count { it % 2 == 0 })//聚合系列:fold 提供一个初始值,并描述第一个到最后一个元素如何依 // 次与这个初始值计算的操作,从而实现累计 println(list.fold(0) { total, next -> total + next })println(list.fold(2) { total, next -> total * next })//聚合系列:foldRight 与fold一样,方向相反,从右往左 println(list.foldRight(2) { total, next -> total * next })//聚合系列:forEach 对每一个元素执行指定的操作 list.forEach { println(it) } //聚合系列:forEachIndexed 对每一个元素执行指定的操作,可以获取元素索引 list.forEachIndexed { index, i -> println("位置${index}的值是${i}。") } //聚合系列:max 获取最大的元素,没有返回null println(list.max())//聚合系列:max 获取指定函数操作后产生最大的元素,没有返回null println(list.maxBy { -it })//聚合系列:min 获取最小的元素,没有返回null println(list.min())//聚合系列:minBy 获取指定函数操作后产生最小的元素,没有返回null println(list.minBy { -it })//聚合系列:none 返回true,如果没有元素满足条件,返回false println(list.none())println(list.none { it % 2 == 0 })聚合系列:reduce 与fold相似 不需要初始值,并描述第一个到最后一个元素如何依 // // 次与这个初始值计算的操作,从而实现累计 println(list.reduce { total, next -> total + next })println(list.reduce { total, next -> total * next })聚合系列:reduceRight 不需要初始值 //reduce,方向相反,从右往左 println(list.reduceRight { total, next -> total * next })//聚合系列:sumBy 返回经过处理过的元素的和 println(list.sumBy { it % 2 })//筛选系:drop 把头n个元素丢弃后的所有元素返回 println(list.drop(3))//筛选系:dropWhile 把头n个满足条件元素丢弃后的所有元素返回 println(list.dropWhile { it < 3 })//筛选系:dropLast 把最后n个元素丢弃后的所有元素返回 println(list.dropLast(3))//筛选系:dropLastWhile 把把最后n个满足条件元素丢弃后的所有元素返回 println(list.dropLastWhile { it > 6 })//筛选系:filter 把满足条件元素所有元素返回 println(list.filter { it % 2 == 0 })//筛选系:filterNot 把不满足条件所有元素返回 println(list.filterNot { it % 2 == 0 })//筛选系:filterNotNull 把不为空的所有元素返回 println(list.filterNotNull())//筛选系:slice 切割 按指定索引或索引范围内的元素 println(list.slice(listOf(1, 2, 4)))println(list.slice(0..2))//筛选系:take 把头n个元素返回 println(list.take(3))//筛选系:takeWhile 把头n个满足条件元素返回 println(list.takeWhile { it < 3 })//筛选系:takeLast 把最后n个元素元素返回 println(list.takeLast(3))//筛选系:dropLastWhile 把把最后n个满足条件元素返回 println(list.takeLastWhile { it > 6 })//映射系或称变形系:flatMap 跌代集合的所有元素,为每一个元素生成一个新的集合,最后把所有集合摊平合并到一个集合里。 println(list.flatMap { listOf(it, it + 1) })//映射系或称变形系:groupBy 返回一个按原集合按条件分组的map println(list.groupBy { if (it % 2 == 0) "偶数" else "奇数" })//映射系或称变形系:map 返回一个对每一个元素变换后的新集合 println(list.map { it * 3 })//映射系或称变形系:mapIndexed在map的基础上 引入集合的索引变换使用 println(list.mapIndexed { index, i -> index * i }) // println(list.mapNotNull() } // mapNotNull 对所有非null元素进行变化 使用的很少 //元素操作: contains 找到此元素返回true println(list.contains(3))//元素操作: elementAt 返回指定索引处的元素,如果索引不在集合的索引范围内, // 则抛出IndexOutOtBoundsException,即索引越界异常错误。 println(list.elementAt(3))//元素操作: elementAtOrElse 如果索引越界则返回调用函数的结果 println(list.elementAtOrElse(10) { it * 2 })//元素操作: elementAtOrNull 如果索引越界则返回null println(list.elementAtOrNull(10))//元素操作: first{} 返回第一个满足条件的元素 println(list.first { it % 2 == 0 })//元素操作: firstOrNull 找不到满足条件第一个的元素返回null println(list.firstOrNull { it % 10 == 0 })//元素操作: indexOf 返回元素的首个索引,如果元素不存在返回-1 println(list.indexOf(5))//元素操作: indexOfFirst 返回满足条件的元素的首个索引,如果元素不存在返回-1 println(list.indexOfFirst { it % 10 == 0 })//元素操作: indexOfLast 返回满足条件的元素的最后一个索引,如果元素不存在返回-1 println(list.indexOfLast { it % 9 == 0 })//元素操作: last{} 返回最后一个满足条件的元素 println(list.last { it % 2 == 0 })//元素操作: lastIndexOf 返回元素的最后索引,如果元素不存在返回-1 println(list.lastIndexOf(5))//元素操作: lastOrNull 找不到满足条件最后一个的元素,找不到元素返回-1 println(list.lastOrNull { it % 10 == 0 })//元素操作: single 返回满足条件的单元素 // 如果没找到或找到多个元素满足条件则抛出异常错误 // llegalArgumentException: Collection contains more than one matching element. println(list.single { it % 5 == 0 })//元素操作: singleOrNull 返回满足条件的单元素 // 如果没找到或找到多个元素满足条件则返回null println(list.singleOrNull { it % 2 == 0 })//生成系: partition 集合拆开分成l对集合,第一个集合满足条件,另一个集合是不满足条件的。 println(list.partition { it % 2 == 0 })//生成系: zip 把两个集合以相同索引顺序进行配对,组成一个新集合。新集合以最短的那个集合索引为准。 println(list.zip(listOf(100, 101, 102)))//排序系:reversed 返回逆转顺序后的所有元素 println(list.reversed())//排序系:sorted 返回(升序)排序后的所有元素 println(list.sorted())//排序系:sortedBy 返回安特定比较器(Comparator)(升序)排序后的所有元素 println(list.sortedBy { it % 3 == 0 })//排序系:sortedDescending 返回(降序序)排序后的所有元素 println(list.sortedDescending())//排序系:sortedByDescending返回安特定比较器(Comparator)(降序序)排序后的所有元素 println(list.sortedByDescending { it % 3 == 0 }) }
输出:
true
true
false
false
4
45
725760
725760
1
2
3
4
5
6
7
8
9
位置0的值是1。
位置1的值是2。
位置2的值是3。
位置3的值是4。
位置4的值是5。
位置5的值是6。
位置6的值是7。
位置7的值是8。
位置8的值是9。
9
1
1
9
false
false
45
362880
362880
5
[4, 5, 6, 7, 8, 9]
[3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
[2, 4, 6, 8]
[1, 3, 5, 7, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[2, 3, 5]
[1, 2, 3]
[1, 2, 3]
[1, 2]
[7, 8, 9]
[7, 8, 9]
[1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10]
{奇数=[1, 3, 5, 7, 9], 偶数=[2, 4, 6, 8]}
[3, 6, 9, 12, 15, 18, 21, 24, 27]
[0, 2, 6, 12, 20, 30, 42, 56, 72]
true
4
20
null
2
null
4
-1
8
8
4
null
5
null
([2, 4, 6, 8], [1, 3, 5, 7, 9])
[(1, 100), (2, 101), (3, 102)]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 4, 5, 7, 8, 3, 6, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
[3, 6, 9, 1, 2, 4, 5, 7, 8]
Kotlin集合—集合类型共性和操作相关推荐
- 【Kotlin】Kotlin 语言集合中的高阶函数详解 ( 数据类 data class | maxBy | minBy | filter | map | any | count | find )
文章目录 I . List 集合高阶函数引入 II . Kotlin 数据类 ( data class ) III . Java 代码 与 Kotlin 代码实现对比 ( 查询年龄最大的 ) IV . ...
- Kotlin(八)集合List Set Map
1.在Kotlin中可以通过以下方式创建ArrayList.LinkedList.HashSet.HashMap等. val arrayList = ArrayList<String>() ...
- Kotlin学习笔记--Kotlin之集合
Kotlin学习笔记--Kotlin之集合 集合类 1. List 集合 1.1 不可变list 1.2 可变list MutableList 1.3 集合遍历 1.4 List的操作函数 1.5 l ...
- 【Groovy】map 集合 ( map 集合定义 | 通过 getClass 函数获取 map 集合的类型 | 代码示例 )
文章目录 一.map 集合定义 二.获取 map 集合类型 三.代码示例 一.map 集合定义 声明键值对 , 其中 键 Key 可以 不使用引号 , 可以 使用单引号 '' , 也可以 使用双引号 ...
- 如何在C#中使用反射获取集合元素类型
目录 介绍 概念化这个混乱 编码此混乱 下载实用程序-5.7 KB 介绍 通过这个技巧,我将努力向读者展示如何使用反射来查询一个集合类的元素类型.当涉及到未实现IEnumerable<T> ...
- 12.JAVA编程思想——集合的类型
12.JAVA编程思想--集合的类型 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51100510 标准Java 1.0 和1 ...
- 12 JAVA编程思想——集合的类型
12.JAVA编程思想--集合的类型 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51100510 标准Java 1.0 和1 ...
- JDK8新特性(三):集合之 Stream 流式操作
1.Stream流由来 首先我们应该知道:Stream流的出现,主要是用在集合的操作上.在我们日常的工作中,经常需要对集合中的元素进行相关操作.诸如:增加.删除.获取元素.遍历. 最典型的就是集合遍历 ...
- 怎么回事儿?C#错误:集合已修改;枚举操作可能无法执行。
本意是遍历表的行,当行中"主键"列为""时,将该行从表中删除.执行时就出现了"集合已修改:枚举操作可能无法执行."的c#错误提示.c#错误代 ...
最新文章
- 在Windows应用程序中使用正则表达式
- CSS3之利用选择器和content属性在页面中插入内容
- 【Linux】crontab 定时任务 遇到几个问题
- python 引用和对象理解
- 百练OJ:1835:宇航员
- MATLAB递归程序的调试方法
- win7升级到win10不能上网解决方法
- 【spark】示例:连接操作
- 用python画出圣诞树_【闲趣】如何用python画出一棵圣诞树
- IDEA Mybatis xml中配置sql代码自动提示【必看】
- Ubuntu14.04安装PyV8--学习笔记
- 新手学习电脑知识的一些方法
- html及Dreamweaver学习心得
- 中国大学慕课第7周测验
- 计算机核心期刊的终审环节,核心期刊终审状态要多久
- Zynq-Linux移植学习笔记之34-使用PCS/PMA IP核配置网络
- 快速学完计算机网络,如何让电脑网速变快 5分钟就学会
- 轻巧的批量图片压缩工具imgfast
- 聚焦五大亮点,神策数据 A/B 测试功能全新发布!
- 商城网站建设怎么做?这五个技巧告诉你!
热门文章
- 华为荣耀3c语言设置在哪个文件夹,(科普)详解Android系统SD卡各类文件夹名称...
- AlphabetJS --- 在console或者shell中打印字符图案的小工具
- 中国百佳产业集群名单
- uniapp离线打包升级SDK(iOS端)
- Linux Ubuntu 分区方案
- 解除网站变灰的方法,阻止网站变灰的方法,remove grayscale from website
- Windows产品密钥
- LABjs、RequireJS、SeaJS
- 用vscode调试swift,显示The debug type is not recognized.
- go编程之常见工具函数