- 01.总数操作符
- 1.1 any
- 1.2 all
- 1.3 count
- 1.4 fold
- 博客笔记大汇总【16年3月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是markdown格式的!同时也开源了生活博客,从12年起,积累共计N篇[近100万字,陆续搬到网上],转载请注明出处,谢谢!
- 链接地址:https://github.com/yangchong211/YCBlogs
- 如果觉得好,可以star一下,谢谢!当然也欢迎提出建议或者问题,万事起于忽微,量变引起质变!
- 如果至少有一个元素符合给出的判断条件,则返回 true
val list = listOf(1, 3, 5, 7, 9) println(list.any { it > 13 }) //false println(list.any { it > 7 }) //true
- 如果全部的元素符合给出的判断条件,则返回 true
val list = listOf(1, 3, 5, 7, 9) println(list.all { it > 13 }) //false println(list.all { it > 0 }) //true
- 返回符合给出判断条件的元素总数
val list = listOf(1, 3, 5, 7, 9) println(list.count { it > 7 }) //1 println(list.count { it > 2 }) //4
- 在一个初始值的基础上从第一项到最后一项通过一个函数累计所有的元素
fun main(args: Array<String>) { val list = listOf(1, 3, 5, 7, 9) println(list.fold(2) { total, next-> println("$next , $total") next + total }) } 1 , 2 3 , 3 5 , 6 7 , 11 9 , 18 27
与 fold 一样,但顺序是从最后一项到第一项
val list = listOf(1, 3, 5, 7, 9)
println(list.foldRight(2) { next, total->
println("$next , $total")
next + total
})
9 , 2
7 , 11
5 , 18
3 , 23
1 , 26
27
val list = listOf(1, 3, 5, 7, 9)
list.forEach { print(it + 1) } //246810
类似于 forEach ,同时可以得到元素的索引
val list = listOf(1, 3, 5, 7, 9)
list.forEachIndexed { index, value -> println("$index value is $value") }
0 value is 1
1 value is 3
2 value is 5
3 value is 7
4 value is 9
返回最大的一项,如果没有则返回null
val list = listOf(1, 3, 5, 7, 9)
println(list.max()) //9
根据给定的函数返回最大的一项,如果没有则返回 null
val list = listOf(1, 3, 5, 7, 9)
println(list.maxBy { -it }) //1
返回最小的一项,如果没有则返回null
val list = listOf(1, 3, 5, 7, 9)
println(list.min()) //1
根据给定的函数返回最小的一项,如果没有则返回null
val list = listOf(1, 3, 5, 7, 9)
println(list.minBy { -it }) //9
如果没有任何元素与给定的函数匹配,则返回true
val list = listOf(1, 3, 5, 7, 9)
println(list.none { it > 10 }) //true
与 fold 一样,但是没有一个初始值。通过一个函数从第一项到最后一项进行累计
val list = listOf(1, 3, 5, 7, 9)
println(list.reduce { total, next ->
println("$next , $total")
total + next
})
3 , 1
5 , 4
7 , 9
9 , 16
25
与 reduce 一样,但是顺序是从最后一项到第一项
val list = listOf(1, 3, 5, 7, 9)
println(list.reduceRight { next, total ->
println("$next , $total")
total + next
})
7 , 9
5 , 16
3 , 21
1 , 24
25
返回所有每一项通过函数转换之后的数据的总和
val list = listOf(1, 3, 5, 7, 9)
println(list.sumBy { it + 1 }) //30
返回包含去掉前n个元素的所有元素的列表
val list = listOf(1, 3, 5, 7, 9)
println(list.drop(2)) //[5, 7, 9]
返回从第一个开始不符合给定函数的元素起之后的列表
val list = listOf(1, 3, 5, 7, 9, 2)
println(list.dropWhile { it < 4 }) //[5, 7, 9, 2]
从最后一项开始,返回从开始不符合给定函数的元素起之后的列表
val list = listOf(10, 1, 3, 5, 7, 9)
println(list.dropLastWhile { it > 4 }) //[10, 1, 3]
过滤所有符合给定函数条件的元素
val list = listOf(1, 3, 5, 7, 9, 2)
println(list.filter { it < 4 }) //[1, 3, 2]
过滤所有不符合给定函数条件的元素
val list = listOf(1, 3, 5, 7, 9, 2)
println(list.filterNot { it < 4 }) //[5, 7, 9]
过滤所有元素中不是null的元素
val list = listOf(1, 3, 5, 7, 9, 2, null)
println(list.filterNotNull()) //[1, 3, 5, 7, 9, 2]
过滤一个list中指定index的元素
val list = listOf(1, 3, 5, 7, 9, 2, null)
println(list.slice(listOf(0, 3))) //[1, 7]
返回从第一个开始的n个元素
val list = listOf(1, 3, 5, 7, 9, 2, null)
println(list.take(2)) //[1, 3]
返回从最后一个开始的n个元素
fun main(args: Array<String>) {
val list = listOf(1, 3, 5, 7, 9, 2, null)
println(list.takeLast(2)) //[2, null]
返回从第一个开始符合给定函数条件的元素。
val list = listOf(1, 3, 5, -1, 7, 9, 2)
println(list.takeWhile { it > 2 }) //[]
println(list.takeWhile { it > 0 }) //[1, 3, 5]
遍历所有的元素,为每一个创建一个集合,最后把所有的集合放在一个集合中
val list = listOf(1, 3, 5, -1, 7, 9, 2)
println(list.flatMap { listOf(it, it + 1) }) //[1, 2, 3, 4, 5, 6, -1, 0, 7, 8, 9, 10, 2, 3]
返回一个根据给定函数分组后的map
val list = listOf(1, 3, 5, -1, 7, 9, 2)
println(list.groupBy { listOf(it) }) //{[1]=[1], [3]=[3], [5]=[5], [-1]=[-1], [7]=[7], [9]=[9], [2]=[2]}
println(list.groupBy { listOf(it, it + 1) }) //{[1, 2]=[1], [3, 4]=[3], [5, 6]=[5], [-1, 0]=[-1], [7, 8]=[7], [9, 10]=[9], [2, 3]=[2]}
返回一个每一个元素根据给定的函数转换所组成的List。
val list = listOf(1, 3, 5, -1, 7, 9, 2)
println(list.map { listOf(it) }) //[[1], [3], [5], [-1], [7], [9], [2]]
println(list.map { listOf(it, it + 1) }) //[[1, 2], [3, 4], [5, 6], [-1, 0], [7, 8], [9, 10], [2, 3]]
返回一个每一个元素根据给定的包含元素index的函数转换所组成的List
val list = listOf(1, 3, 5, -1, 7, 9, 2)
println(list.mapIndexed { index, value -> index }) //[0, 1, 2, 3, 4, 5, 6]
println(list.mapIndexed { index, value -> index * value }) //[0, 3, 10, -3, 28, 45, 12]
返回一个每一个非null元素根据给定的函数转换所组成的List
val list = listOf(1, 3, 5, -1, 7, 9, null, 2)
println(list.mapNotNull { it }) //[1, 3, 5, -1, 7, 9, 2]
如果指定元素可以在集合中找到,则返回true
val list = listOf(1, 3, 5, -1, 7, 9, null, 2)
println(list.contains(3)) //true
println(list.contains(13)) //false
返回给定index对应的元素,如果index数组越界则会抛出 IndexOutOfBoundsException
val list = listOf(1, 3, 5, -1, 7, 9, null, 2)
println(list.elementAt(3)) //-1
println(list.elementAt(6)) //null
返回给定index对应的元素,如果index数组越界则会根据给定函数返回默认值
val list = listOf(1, 3, 5, -1, 7, 9, null, 2)
println(list.elementAtOrElse(3, { it * 2 })) //-1
println(list.elementAtOrElse(16, { it * 2 })) //32
返回给定index对应的元素,如果index数组越界则会返回null
val list = listOf(1, 3, 5, -1, 7, 9, null, 2)
println(list.elementAtOrNull(3)) //-1
println(list.elementAtOrNull(16)) //null
返回符合给定函数条件的第一个元素
val list = listOf(1, 3, 5, -1, 7, 9, 2)
println(list.first { it % 3 == 0 }) //3
返回符合给定函数条件的第一个元素,如果没有符合则返回null
val list = listOf(1, 3, 5, -1, 7, 9, 2)
println(list.firstOrNull { it % 3 == 0 }) //3
println(list.firstOrNull { it % 8 == 0 }) //null
返回指定元素的第一个index,如果不存在,则返回 -1
val list = listOf(1, 3, 5, -1, 7, 9, 2)
println(list.indexOf(5)) //2
println(list.indexOf(12)) //-1
返回第一个符合给定函数条件的元素的index,如果没有符合则返回 -1
val list = listOf(1, 3, 5, 1, 7, 9, 2)
println(list.indexOfFirst { it % 2 == 0 }) //6
println(list.indexOfFirst { it % 12 == 0 }) //-1
返回最后一个符合给定函数条件的元素的index,如果没有符合则返回 -1
val list = listOf(1, 3, 5, 6, 7, 9, 2)
println(list.indexOfLast { it % 2 == 0 }) //6
println(list.indexOfLast { it % 12 == 0 }) //-1
返回符合给定函数条件的最后一个元素
val list = listOf(1, 3, 5, 6, 7, 9, 2)
println(list.last { it % 2 == 0 }) //2
println(list.last { it % 3 == 0 }) //9
返回指定元素的最后一个index,如果不存在,则返回 -1
val list = listOf(1, 3, 2, 6, 7, 9, 2)
println(list.lastIndexOf(2)) //6
println(list.lastIndexOf(12)) //-1
返回符合给定函数条件的最后一个元素,如果没有符合则返回null
val list = listOf(1, 3, 2, 6, 7, 9, 2)
println(list.lastOrNull { it / 3 == 3 }) //9
println(list.lastOrNull { it == 10 }) //null
返回符合给定函数的单个元素,如果没有符合或者超过一个,则抛出异常
val list = listOf(1, 9, 2, 6, 7, 9, 2)
println(list.single { it % 7 == 0 }) //7
println(list.single { it == 2 }) //IllegalArgumentException
返回符合给定函数的单个元素,如果没有符合或者超过一个,则返回null
val list = listOf(1, 9, 2, 6, 7, 9, 2)
println(list.singleOrNull { it % 7 == 0 }) //7
println(list.singleOrNull { it == 2 }) //null
把一个给定的集合分割成两个,第一个集合是由原集合每一项元素匹配给定函数条 件返回 true 的元素组成,第二个集合是由原集合每一项元素匹配给定函数条件返回 false 的元素组成
val list = listOf(1, 9, 2, 6, 7, 9, 2)
val (list1, list2) = list.partition { it % 2 == 0 }
println(list1) //[2, 6, 2]
println(list2) //[1, 9, 7, 9]
返回一个包含原集合和给定集合中所有元素的集合,因为函数的名字原因,我们可以使用 + 操作符
val list1 = listOf(1, 9, 2, 6, 7, 9, 2)
val list2 = listOf(1, 2, 4, 6, 8, 10)
println(list1.plus(list2)) //[1, 9, 2, 6, 7, 9, 2, 1, 2, 4, 6, 8, 10]
println(list1 + list2) //[1, 9, 2, 6, 7, 9, 2, 1, 2, 4, 6, 8, 10]
返回由 pair 组成的List,每个 pair 由两个集合中相同index的元素组成。这个返回的List的大小由最小的那个集合决定
val list1 = listOf(1, 9, 2, 6, 7, 9, 2)
val list2 = listOf(1, 2, 4, 6, 8, 10)
val list3 = list1.zip(list2)
println(list3.javaClass)
println(list3.get(0).javaClass)
println("${list3.get(0).first} , ${list3.get(0).second}")
list3.forEach { println(it) }
class java.util.ArrayList
class kotlin.Pair
1 , 1
(1, 1)
(9, 2)
(2, 4)
(6, 6)
(7, 8)
(9, 10)
从包含pair的List中生成包含List的Pair
val list1 = listOf(Pair("leavesC", 1), Pair("leavesC_2", 2), Pair("leavesC_3", 3))
val list2 = list1.unzip()
println(list2.javaClass)
println(list2.first)
println(list2.second)
class kotlin.Pair
[leavesC, leavesC_2, leavesC_3]
[1, 2, 3]
返回一个与指定list相反顺序的list
val list1 = listOf(Pair("leavesC", 1), Pair("leavesC_2", 2), Pair("leavesC_3", 3))
val list2 = list1.reversed()
println(list2) //[(leavesC_3, 3), (leavesC_2, 2), (leavesC, 1)]
返回一个自然排序后的list
val list1 = listOf(2, 4, 1, 9, 5, 10)
val list2 = list1.sorted()
println(list2) //[1, 2, 4, 5, 9, 10]
val list3 = listOf("a", "c", "ab", "b", "cdd", "cda")
val list4 = list3.sorted()
println(list4) //[a, ab, b, c, cda, cdd]
返回一个根据指定函数排序后的list
val list1 = listOf(2, 4, 1, 9, 5, 10)
val list2 = list1.sortedBy { it - 3 }
println(list2) //[1, 2, 4, 5, 9, 10]
返回一个降序排序后的List
val list1 = listOf(2, 4, 1, 9, 5, 10)
val list2 = list1.sortedDescending()
println(list2) //[10, 9, 5, 4, 2, 1]
返回一个根据指定函数降序排序后的list
val list1 = listOf(2, 4, 1, 9, 5, 10)
val list2 = list1.sortedByDescending { it % 2 }
println(list2) //[1, 9, 5, 2, 4, 10]
- github:https://github.com/yangchong211
- 知乎:https://www.zhihu.com/people/yczbj/activities
- 简书:http://www.jianshu.com/u/b7b2c6ed9284
- csdn:http://my.csdn.net/m0_37700275
- 喜马拉雅听书:http://www.ximalaya.com/zhubo/71989305/
- 开源中国:https://my.oschina.net/zbj1618/blog
- 泡在网上的日子:http://www.jcodecraeer.com/member/content_list.php?channelid=1
- 邮箱:yangchong211@163.com
- 阿里云博客:https://yq.aliyun.com/users/article?spm=5176.100- 239.headeruserinfo.3.dT4bcV
- segmentfault头条:https://segmentfault.com/u/xiangjianyu/articles
- 掘金:https://juejin.im/user/5939433efe88c2006afa0c6e