kt 集合
Kotlin初探:Kotlin的集合操作符
与许多语言不同,Kotlin区分了可变集合和不可变集合(lists, sets, maps等)。精确的控制集合何时可以编辑,对消除bug和设计好的API是非常有用的。——–官网
本文内容:
集合概述
集合操作符
- 查看kotlin转化成java的代码
集合概述
Iterable:任何实现这个接口的,都可以遍历元素
MutableIterable:继承Iterable接口。并提供给我们移除的方法
Collection:元素的通用的范性集合,这个集合是一个只读的集合,它提供给我们可以获取集合的size,是否为空,是否包含某个或某组数据等方法。
MutableCollection:继承Collection,MutableIterable。并提供了额外的函数add,addAll,remove,clear等方法
List:继承Collection。一个范性有序的只读集合。因为有序,所以,我们可以使用get(position)等查询的方法
MutableList:继承List,MutableCollection。一个有序集合。并额外提供了add/remove元素的方法
Set:继承Collection。一个无序并不支持重复元素的集合
MutableSet:继承Set,MutableCollection,一个无序的集合并且不支持重复元素。但是,支持add/remove元素
Map:一个key-value的只读集合。并且key唯一。
MutableMap:继承Map。支持put/remove元素
集合操作符
kotlin提供了一系列的集合操作符,当我们了解后,一定可以事半功倍,下面详细介绍下各种操作符的功能。
any
如果至少有一个元素与判断条件相符,则 返回true
val list = listOf(1,2,3)
assertTrue { list.any{it >2} }
all
如果全部元素与判断条件相符,则 返回true
val list = listOf(1,2,3)
assertTrue { list.all{it < 4} }
associate
通过指定的条件,把list转换成map
val list = listOf(1, 2)
assertEquals(mutableMapOf(Pair("a1",1),Pair("a2",2)), list.associate({ it -> Pair("a"+it,it)}))
associateBy
通过指定的条件,把list转换成map。2种,第一只转换map的key;第二map的key-value都转换
val list = listOf(1, 4, 2, 2)
assertEquals(hashMapOf("key1" to 1, "key4" to 4, "key2" to 2), list.associateBy { it -> "key" + it })
assertEquals(hashMapOf("key1" to "value1", "key4" to "value4", "key2" to "value2"), list.associateBy({ it -> "key" + it }, { it -> "value" + it }))
average
求集合的平均值(元素之和/元素大小)。仅限(Byte,Short,Int,Long,Float,Double)
val list = listOf(1, 4, 2, 2)
assertEquals(2.25,list.average())
component1,…,component5
返回集合的第n个元素,越界返回ArrayIndexOutOfBoundsException
val list = listOf(1, 4, 2, 2)
assertEquals(1,list.component1())
assertEquals(4,list.component2())
contain
如果指定元素可以在集合找到,则 返回true
val list = listOf(4,1,2,3,4)
assertTrue(list.contains(3))
containsAll
如果指定集合所有元素都可以在目标集合找到,则 返回true
val list = listOf(4,1,2,3,4)
val subList = listOf(2,1)
assertTrue(list.containsAll(subList))
count
返回与判断条件相符的元素个数
val list = listOf(1,2,3)
assertEquals(2,list.count { it>1 })
distinct
返回一个只包含不同元素的数组
val list = listOf(1, 4, 2, 2)
assertEquals(listOf(1,4,2),list.distinct())
distinctBy
返回集合元素执行指定条件后,不同元素的数组(原始数组元素)
val list = listOf(1, 4, 2, 2)
assertEquals(listOf(1,4),list.distinctBy { it%2 == 0})
drop
返回所有元素的列表,但不包含前n个元素
val list = listOf(1,2,3,4)
assertEquals(listOf(3,4),list.drop(2))
dropLast
返回所有元素的列表,但不包含最后n个元素
val list = listOf(1,2,3,4)
assertEquals(listOf(1,2),list.dropLast(2))
dropWhile
返回所有元素的列表,但不包含满足判断条件的元素
val list = listOf(4,1,2,3,4)
assertEquals(listOf(4,1,2,3,4),list.dropWhile{it <3})
val list = listOf(1,2,3,4)
assertEquals(listOf(3,4),list.dropWhile{it <3})
dropLastWhile
返回所有元素的列表,但不包含从列表最后开始满足条件的元素
//2不满足
val list = listOf(1,2,3,4,2)
assertEquals(listOf(1,2,3,4,2),list.dropLastWhile{it >3})
//4,5满足
val list = listOf(1,2,3,4,5)
assertEquals(listOf(1,2,3),list.dropLastWhile{it >3})
elementAt
返回指定索引的元素,如果索引越界,则抛出ArrayIndexOutOfBoundsException
val list = listOf(1,2,3,4)
assertEquals(4,list.elementAt(3))
elementAtOrElse
返回指定索引的元素,如果索引越界,则返回指定的默认值
val list = listOf(1,2,3,4)
assertEquals(18,list.elementAtOrElse(6,{it *3}))
elementAtOrElse
返回指定索引的元素,如果索引越界,则返回null
val list = listOf(1,2,3,4)
assertEquals(null,list.elementAtOrNull(6))
filter
筛选出所有符合条件的元素
val list = listOf(1,2,3,4)
assertEquals(listOf(2,3),list.filter{ it in 2..3 })
filterIndexed
筛选出所有符合条件的元素(条件多了一个索引参数)
val list = listOf(1, 4, 2, 2)
assertEquals(listOf(4),list.filterIndexed { index, it -> index>0 && it >2} )
filterNot
筛选出所有不符合条件的元素
val list = listOf(1,2,3,4)
assertEquals(listOf(1,4),list.filterNot{ it in 2..3 })
filterNotNull
筛选出所有不为null的元素
val list = listOf(1,2,3,null,4)
assertEquals(listOf(1,2,3,4),list.filterNotNull())
first
返回第一个满足条件的元素,没有则抛出NoSuchElementException
val list = listOf(1,2,3,4)
assertEquals(2,list.first { it > 1 })
firstOrNull
返回第一个满足条件的元素,没有,则 返回Null
val list = listOf(1, 2, 3, 4)
assertEquals(null, list.firstOrNull { it > 5 })
find
同firstOrNull。返回第一个满足条件的元素,没有,则 返回Null
val list = listOf(1,2,3,4)
assertEquals(2,list.find { it > 1 })
findLast
返回最后一个满足条件的元素,没有,则 返回Null
val list = listOf(1,2,3,4)
assertEquals(4,list.findLast { it > 1 })
flatMap
遍历所有的元素,为每一个元素创建一个集合,最后把所有的集合放在一个集合中。
val list = listOf(1, 2)
assertEquals(listOf(1,2,2,4),list.flatMap { it -> listOf(it,it*2) })
flatten
遍历一个单独的集合,包含给定嵌套集合里面的所有元素。
val list = listOf(listOf(1,2), listOf(4,2), listOf(3), listOf(4))
assertEquals(listOf(1,2,4,2,3,4),list.flatten())
fold
将对集合从第一个到最后一个元素进行操作
//这里是进行乘法操作
val list = listOf(1, 2, 3, 4)
assertEquals(48, list.fold(2) { total, next -> total * next })
foldRight
跟fold操作一样,不过是从最后一个到到一个元素进行操作
//这里是进行乘法操作
val list = listOf(1, 2, 3, 4)
assertEquals(48, list.foldRight(2) { total, next -> total * next })
get
获取索引所在的元素,没有则返回ArrayIndexOutOfBoundsException
val list = listOf(1, 2, 4, 2, 3, 4)
assertEquals(4, list.get(2))
getOrElse
获取索引所在的元素,没有就返回默认值
val list = listOf(1, 2, 4, 2, 3, 4)
assertEquals(10, list.getOrElse(8, { _ -> 10 }))
assertEquals(2, list.getOrElse(1, { _ -> 10 }))
getOrNull
获取索引所在的元素,没有就返回null
val list = listOf(1, 2, 4, 2, 3, 4)
assertEquals(null, list.getOrNull(8))
assertEquals(4, list.getOrNull(2))
groupBy
返回一个根据给定函数分组后的map
val list = listOf(1, 2, 2, 4)
assertEquals(mapOf("error" to listOf(1), "right" to listOf(2, 2, 4)), list.groupBy { if (it % 2 == 0) "right" else "error" })
indexOf
返回指定元素的第一个索引位置,不存在返回-1
val list = listOf(1, 2, 2, 4)
assertEquals(1,list.indexOf(2))
indexOfFirst
返回第一个符合指定条件的元素索引,不存在返回-1
val list = listOf(1, 2, 2, 4)
assertEquals(1, list.indexOfFirst { it % 2 == 0 })
indexOfLast
返回符合指定条件的最后一个索引位置,不存在返回-1
val list = listOf(1, 2, 2, 4)
assertEquals(3, list.indexOfLast { it % 2 == 0 })
last
返回符合给定函数条件的最后一个元素,不存在则抛出NoSuchElementException
val list = listOf(1, 2, 2, 4)
assertEquals(4, list.last { it % 2 == 0 })
lastIndexOf
返回指定元素的第一个索引位置,不存在返回-1
val list = listOf(1, 2, 2, 4)
assertEquals(2, list.lastIndexOf(2) )
lastOrNull
返回符合给定函数条件的最后一个元素,不存在返回null
val list = listOf(1, 2, 2, 4)
assertNull( list.lastOrNull{ it >5})
map
返回一个每个元素都根据给定函数条件转换的数组
val list = listOf(1, 2, 2, 4)
assertEquals(listOf(2, 4, 4, 8), list.map{ it*2} )
mapIndexed
功能同map,比map多了一个索引
val list = listOf(1, 2, 2, 4)
assertEquals(listOf(0, 2, 4, 4), list.mapIndexed { index, it -> if (index % 2 == 0) index * it else it })
mapNotNull
同map。但是,元素转换不包含Null
val list = listOf(1, 2,null, 2, 4)
assertEquals(listOf(2, 4, 4, 8), list.mapNotNull { it?.times(2) })
max
返回集合最大元素。不存在返回null
val list = listOf(1, 2, 2, 4)
assertEquals(4, list.max())
val list = emptyList<Int>()
assertEquals(null, list.max())
maxBy
返回根据指定函数转换后,产生的最大值的原始元素(返回的还是原始元素)。如果没有元素,则返回null。
val list = listOf(1, 2, 2, 4)
assertEquals(1, list.maxBy { -it })
min
返回集合最小元素,不存在返回null
val list = listOf(1, 2, 2, 4)
assertEquals(1, list.min())
minBy
返回根据指定函数转换后,产生的最小值的原始元素(返回的还是原始元素)。如果没有元素,则返回null。
val list = listOf(1, 2, 2, 4)
assertEquals(4, list.minBy { -it })
none
如果没有任何元素与指定的函数条件匹配,则返回true。
val list = mutableListOf(1, 2, 2, 4)
assertTrue(list.none { it > 4 })
orEmpty
如果没有任何元素与指定的函数条件匹配,则返回true。
val list = mutableListOf(1, 2, 2, 4)
assertTrue(list.none { it > 4 })
partition
把一个指定的集合分割成2个。第一个集合是所有符合指定函数条件的,第二个集合是所有不符合指定条件的集合
val list = mutableListOf(1, 2, 2, 4)
assertEquals(Pair(listOf(2, 2, 4), listOf(1)), list.partition { it % 2 == 0 })
plus
返回一个包含原集合和给定集合中所有元素的集合。也可以使用+操作符
val list = listOf(1, 2, 2, 4)
val listTwo = listOf(5, 6)
assertEquals(listOf(1, 2, 2, 4, 5, 6), list.plus(listTwo))
assertEquals(listOf(1, 2, 2, 4, 5, 6), list + listTwo)
reduce
与fold功能一样。但是,没有初始值。把集合从第一个到最后一个,按指定条件进行操作
val list = listOf(1, 2, 2, 4)
assertEquals(-7, list.reduce { total, next -> total -next })
reduceRight
与reduce一样。但是,顺序是从最后一个到第一个,按指定条件操作
val list = listOf(1, 2, 2, 4)
assertEquals(-1, list.reduceRight { next, total -> total - next })
reverse
倒序排列集合
val list = listOf(1, 2, 2, 4)
assertEquals(listOf(4,2,2,1), list.reversed())
single
返回符合指定函数条件的单个元素,如果没有符合或者超过一个,则抛出异常。
val list = listOf(1, 2, 2, 4)
assertEquals(4, list.single { it == 4 })
singleOrNull
返回符合指定函数条件的单个元素,如果没有符合或者超过一个,则返回null
val list = listOf(1, 2, 2, 4)
assertEquals(null, list.singleOrNull { it == 2 })
sorted
返回所有元素分类排序列表。
val list = listOf(1, 4, 2, 2)
assertEquals(listOf(1, 2, 2, 4), list.sorted())
sortBy
返回所有元素分类排序列表。顺序按照指定函数条件排列
val list = listOf(1, 4, 2, 2)
assertEquals(listOf(4,2,2,1), list.sortedBy { -it })
sortDescending
返回所有元素分类排序列表。顺序按降序排列
val list = listOf(1, 4, 2, 2)
assertEquals(listOf(4,2,2,1), list.sortedDescending())
sortedByDescending
返回所有元素分类排序列表。顺序按指定函数条件的降序排列
val list = listOf(1, 4, 2, 2)
assertEquals(listOf(1,2,2,4), list.sortedByDescending{ -it })
sum
返回集合中元素值的总和。
val list = listOf(1, 4, 2, 2)
assertEquals(9, list.sum())
sumBy
返回集合中元素按照指定函数条件转换后产生值的总和。
val list = listOf(1, 4, 2, 2)
assertEquals(-9, list.sumBy{ -it })
slice
返回一个list中指定index的元素。
val list = listOf(1, 4, 2, 2)
assertEquals(listOf(4,2,2), list.slice(1..3))
assertEquals(listOf(1,4), list.slice(listOf(0,1)))
take
返回从第一个元素开始的n个元素。
val list = listOf(1, 4, 2, 2)
assertEquals(listOf(1,4), list.take(2))
takeLast
返回从最后一个元素开始的n个元素
val list = listOf(1, 4, 2, 2)
assertEquals(listOf(2,2), list.takeLast(2))
takeWhile
返回从最后一个元素开始符合指定函数条 件的元素。(碰到不符合条件的,不往下走)
val list = listOf(1, 4, 2, 2)
assertEquals(listOf(2, 2), list.takeLastWhile { it < 3 })
zip
返回一个列表,该列表由两个集合中相同索引元素建立的元素对。这个列表长度为最短集合的长度。
val list = listOf(1, 4, 2, 2)
assertEquals(listOf(Pair(1,10),Pair(4,20),Pair(2,30)), list.zip(listOf(10,20,30)))
kt 集合的更多相关文章
- MongoDB学习笔记~Update方法更新集合属性后的怪问题
回到目录 在对MongoDB进行封装后,对于Update更新对象里的集合属性时出现了一个现象,让人感到很恶心,人家更新前是个美丽的Array,但是更新之后集合对象变成了键值对,键是集合的类型名称,值是 ...
- 项目总结笔记系列 Social Hub KT Session2
KT Session2: 主要是代码的实现(KT is knowledge Transfer) 如图所示,在整个Social Hub项目中,我们的项目Data Feed Service处于承上启下的作 ...
- Mysql函数集合
Mysql提供了很多函数 提供的常用函数集合 一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整 ...
- Python爬虫防封杀方法集合
Python爬虫防封杀方法集合 mrlevo520 2016.09.01 14:20* 阅读 2263喜欢 38 Python 2.7 IDE Pycharm 5.0.3 前言 ...
- Kotlin——高级篇(五):集合之常用操作符汇总
在上一篇文章Kotlin--高级篇(四):集合(Array.List.Set.Map)基础中讲解到了数组Array<T>.集合(List.Set.Map)的定义与初始化.但是由于篇幅的原因 ...
- Kotlin——高级篇(四):集合(Array、List、Set、Map)基础
在实际的项目开发中,集合的运用可以说是多不胜数.不过Kotlin中的集合运用和Java中还是有很大的差别,他们两者之间,除了集合的类型相同以外,还包含集合的初始化的不同,以及Kotlin对于集合封装特 ...
- 集合-Collection接口
集合 和 数组 的比较: 数组 - 本质上就是在内存空间中申请的一段连续内存空间,存放多个相同类型的数据 - 数组一旦定义完毕,则在内存空间中的长度固定. - 插入/删除元素时可能导致大量元素的移动, ...
- java基础集合经典训练题
第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...
- .Net多线程编程—并发集合
并发集合 1 为什么使用并发集合? 原因主要有以下几点: System.Collections和System.Collections.Generic名称空间中所提供的经典列表.集合和数组都不是线程安全 ...
随机推荐
- c#,Model 实体转json,字符串转json
public class JsonF { #region 字符串转json /// <summary> /// 字符串转json /// </summary> /// < ...
- SVG 学习<四> 基础API
目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...
- Structs 2 session 学习
后台获取 值类型 request.getSession().setAttribute("username", user.getUserName()); 对象类型 reque ...
- RPM软件管理工具
1 概述 RPM(RedHat Package Manager),Rethat软件包管理工具,类似windows里面的setup.exe 是Linux这系列操作系统里面的打包安装工具,它虽然是RedH ...
- 《汇编语言 基于x86处理器》第十一章 MS-DOS 编程部分的代码 part 2
▶ 书中第十一章的程序,主要讲了 Windows 接口,在小黑框中进行程序交互 ● 在屏幕指定位置输出带自定义属性的文字 INCLUDE Irvine32.inc .data outHandle HA ...
- PHP微信关注自动回复文本消息。
服务器配置URL默认接受 $_GET["echostr"] 配置成功. public function GetShow(){ $token = $this->token; / ...
- DataBinding(一)DataBinding初认识
参考DataBinding系列(一):DataBinding初认识 早在2015谷歌 I/O大会上,就介绍了一个新的框架DataBinding,从名字就可以看出来,这是一个数据绑定框架.我们为什么要使 ...
- Android自定义View学习(三)
属性动画(上) 参考:HenCoder 自定义绘制的第 1-6 期:属性动画 Property Animation(上手篇) Interpolator 其实就是速度设置器,设置动画运行的速度. 属性动 ...
- Appium-We wanted {"required":["value"]} and you sent ["text","sessionId","id","value"]
APK 链接:https://pan.baidu.com/s/17oeTM1qA0QjPBqLh6pS0Yg 提取码:s9ru # coding:utf-8from appium import web ...
- react-native 相对项目路径导入组件
在使用react-native的时候,经常要自定义很多组件,但是只能使用../../../的方式,如果目录多了一长串,书写很烦,看着也不好看. 方法一: 例如你想引入utils里面的文件,不想../. ...