初识Kotlin之集合 (3)

Kotlin提供了丰富的函数供我们使用,同时也吓退了很多朋友,别怕!Kotlin的函数都是买一送一的,学会一个,不愁另一个

基础用法 val list = listOf(-3,-2,1,3,5,3,7,2,10,9) println("filter : ${list.filter { it > 1 }}") println("filterIndexed : ${list.filterIndexed { index, result -> index % 2 == 0 && result > 5 }}") println("take : ${list.take(5)}") println("takeWhile : ${list.takeWhile { it < 5 }}") println("drop : ${list.drop(5)}") println("distinct : ${list.distinct()}") println("distinctBy : ${list.distinctBy { it % 2 }}") println("slice : ${list.slice(IntRange(1,5))}") ----------------------------------------------------- filter : [3, 5, 3, 7, 2, 10, 9] filterIndexed : [7, 10] take : [-3, -2, 1, 3, 5] takeWhile : [-3, -2, 1, 3] drop : [3, 7, 2, 10, 9] distinct : [-3, -2, 1, 3, 5, 7, 2, 10, 9] distinctBy : [-3, -2, 1] slice : [-2, 1, 3, 5, 3] 统计元素

在用Java8和Kotlin之前。和排序一样,在实现求最大值、平均值、求和等操作时,都要写很多冗余的代码。现在好了,Kotlin已经封装了这些方法。朋友们,千万不要过于依赖这些方法。有些一条sql能解决的问题,就不要把统计的逻辑留给代码完成。这里的方法更适合在业务处理过程中,对一些简单集合的统计处理。如果是统计报表的功能,就不要有什么歪心思了。分享一篇关于统计的文章:常见的统计解决方案

常用函数

max() : 获取集合中最大的元素,若为空元素集合,则返回null

maxBy{...} : 获取方法处理后返回结果最大值对应那个元素的初始值,如果没有则返回null

min() : 获取集合中最小的元素,若为空元素集合,则返回null

minBy{...} : 获取方法处理后返回结果最小值对应那个元素的初始值,如果没有则返回null

sum() : 对集合原元素数据进行累加,返回值类型是Int

sumBy{...} : 根据元素运算操作后的结果进行累加,返回值类型是Int

sumByDouble{...} : 和sumBy{}相似,但返回值类型是Double

average() : 对集合求平均数

reduce{...} : 从集合中的第一个元素到最后一个元素的累计操作

reduceIndexed{...} : 在reduce{}函数基础上多了一个下标功能

reduceRight{...} : 与reduce{...} 相反,该方法是从最后一个元素开始

reduceRightIndexed{...} : 在reduceRight{}函数基础上多了一个下标功能

fold{...} : 和reduce{}类似,但是fold{}有一个初始值

foldIndexed{...} : 和reduceIndexed{}类似,但是foldIndexed{}有一个初始值

foldRight{...} : 和reduceRight{}类似,但是foldRight{}有一个初始值

foldRightIndexed{...} : 和reduceRightIndexed{}类似,但是foldRightIndexed{}有一个初始值

any{...} : 判断集合中是否存在满足条件的元素

all{...} : 判断集合中的所有元素是否都满足条件

none{...} : 和all{...}函数的作用相反

使用建议

不能过于依赖Kotlin的统计方法,这些方法更适合一些业务逻辑上的简单统计处理,不适合数据统计功能。

注意sum函数返回结果是Int类型,如果是Double则需要用sumByDouble方法。

基础用法 val persons = mutableListOf(Person("n1", 20, 2000.0), Person("n2", 24, 4000.0), Person("n3", 28, 6000.0), Person("n4", 26, 8000.0), Person("n5", 34, 7000.0), Person("n6", 44, 5000.0)) println("maxBy : ${persons.maxBy { it.age }}") println("sumByDouble : ${persons.sumByDouble { it.salary }}") println("average : ${persons.map { it.salary }.average()}") println("any : ${persons.any { it.salary < 1000 }}") ----------------------------------------------------- maxBy : Person(name=n6, age=44, salary=5000.0) sumByDouble : 32000.0 average : 5333.333333333333 any : false 元素映射

Kotlin提供了一个遍历集合的forEach方法,也提供了对集合每个元素都进行指定操作并返回一个新集合的map方法。map方法是可以遍历集合,但如果误将其认为遍历集合的方法,同样会将mapNotNull方法误以为成遍历非null元素的方法。

常用方法

map{...} : 把每个元素按照特定的方法进行转换,并返回一个新的集合

mapNotNull{...} : 同map{}相同,过滤掉转换之后为null的元素

mapIndexed{index,result} : 在map{} 函数上多了一个下标功能

mapIndexedNotNull{index,result} : 在mapNotNull{}函数上多了一个下标功能

flatMap{...} : 根据条件合并两个集合,组成一个新的集合

groupBy{...} : 分组。即根据条件把集合拆分为为一个Map<K,List<T>>类型的集合

使用建议

map方法不是集合遍历,集合遍历的方法是forEach

mapNotNull方法不是遍历集合不为null的方法,而是过滤转换后为null的元素

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpywpx.html