转载请标明出处:https://blog.csdn.net/zhaoyanjun6/article/details/87969098
本文出自【赵彦军的博客】


高阶函数

  • any
  • all
  • count
  • none
  • max
  • min
  • sum
  • forEachIndexed
  • drop 从前面丢弃元素
  • dropLast 从后面丢弃元素
  • groupBy 分组
  • filter
  • filterNot
    • 例子1:操作List
    • 例子2:操作Map
  • 更多操作 filterKeys、filterValues
  • take、takeLast
  • sortedBy 排序
  • map 数据结构变化
  • 常用操作符
    • 下标操作类
    • 判断类
    • 过滤类
    • 转换类
    • 排序类

any

any 只要有一个符合就返回true

val list = listOf<Int>(1,2,3,4,5,6)//只要list 中有一个是大于3就返回true
val any= list.any { it>3 }

all

all 所有条件符合才返回true

val list = listOf<Int>(1,2,3,4,5,6)// list 中所有元素大于3就返回true
val any= list.all { it>3 }

count

count 返回符合条件的数目

val list = listOf<Int>(1,2,3,4,5,6)var any =  list.count { it > 5 }

none

none 如果没有任何元素与给定的函数匹配,则返回true

val list = listOf<Int>(1,2,3,4,5,6)var any =  list.none { it > 5 }

max

max 返回最大的值,如果没有则返回null ,min同理

val list = listOf<Int>(1,2,3,4,5,6)
var result = list.max()

min

min 返回最小的值,如果没有则返回null

val list = listOf<Int>(1,2,3,4,5,6)
var result = list.min()

sum

sum 返回数据相加总数

val list = listOf<Int>(1,2,3,4,5,6)
var result = list.sum()

forEachIndexed

forEachIndexed 与foreach相同,但是可以得到index

drop 从前面丢弃元素

val list = listOf<Int>(1,2,3,4,5,6)
var result = list.drop(2)
//丢弃前两个元素,结果为:[3, 4, 5, 6]

dropLast 从后面丢弃元素

val list = listOf<Int>(1,2,3,4,5,6)
var result = list.dropLast(2)
//丢弃后两个元素,结果为:[1,2,3, 4]

groupBy 分组

groupBy 根据函数将集合分组,返回map类型对象

val list = listOf<Int>(1,2,3,4,5,6,7,8,9,10)//把 list 分为偶数和奇数
var result = list.groupBy { it % 2 == 0}
Log.e("zhaoyanjun:", "" + result)

结果:返回的是 map 对象

{false=[1, 3, 5, 7, 9], true=[2, 4, 6, 8, 10]}

filter

过滤list,符合过滤条件的就是过滤结果

var list = mutableListOf(1, 2, 3, 4)var list2 = list.filter { it ->it > 2  }

或者可以更短:

var list = mutableListOf(1, 2, 3, 4)var list2 = list.filter { it > 2
}

list2的结果是:

[3,4]

filterNot

把符合条件的过滤掉,剩下的是结果。这个操作和 filter 相反。

例子1:操作List

var list = mutableListOf<Int>(1, 2, 3)
var list2 = list.filterNot {  it > 2}

list2结果是:

[1,2]

例子2:操作Map

var map = mutableMapOf<Int, String>()
map.put(0, "a")
map.put(1, "b")
map.put(2, "c")var map2 = map.filterNot { it.key ==2 }

map2的结果是:

{0=a, 1=b}

更多操作 filterKeys、filterValues

 var map = mutableMapOf<Int, String>()var map2 = map.filterKeys { it == 3 }  //过滤key
val map3 = map.filterValues { it == "a" } //过滤 value

take、takeLast

take是从集合中取前几个元素
takeLast是从集合中取后几个元素

val list = mutableListOf<Int>(1,2,3,4)var list2 = list.take(3)    //结果:[1, 2, 3]
var list3 = list.takeLast(2)  //结果:[2, 3, 4]

sortedBy 排序

java 中,我们要对一个list排序,需要写很多代码,但是在 kotlin 中,就简单很多了。

首先我们定义一个 User 类,这个类只有两个字段,分别是 idname ,代码如下:

class User(var id: Int, var name: String)
//定义三个 User 变量
var u1 = User(1,"张三")
var u2 = User(3,"李四")
var u3 = User(2,"王五")//用list把三个变量装起来
var list = listOf<User>(u1,u2,u3)//对 id 字段进行排序,并把排序的结果赋值给 list2
var list2 = list.sortedBy { it.id }//输出list2
list2.forEach {Log.e("zhaoyanjun:", ""+ it.id + "" + it.name)
}

结果如下:

com.kotlin E/zhaoyanjun:: 1张三
com.kotlin E/zhaoyanjun:: 2王五
com.kotlin E/zhaoyanjun:: 3李四

需要注意的是:

1、使用 list.sortedBy 对 list 排序,但是 list 的顺序并没有发生就改变,还是原来的顺序。
2、sortedBy()方法为顺序排序,如果想要逆序排序,可以使用 sortedByDescending() 方法。

map 数据结构变化

我们现在有一个需求,需要把所有的用户的用户名存在一个 list 里面,就可以用 map 操作符。

var listName = list.map { it.name }Log.e("zhaoyanjun:", "" + listName)

输出结果:

[张三, 李四, 王五]

除此之外,还可以连续操作。比如,我们把用户名字中最后一个取出来。

var listName = list.map { it.name }.takeLast(1)Log.e("zhaoyanjun:", "" + listName)

输出结果:

[王五]

常用操作符

Kotlin 的操作符跟 RxJava 基本一致,不需要额外记忆。

下标操作类

  • contains —— 判断是否有指定元素
  • elementAt —— 返回对应的元素,越界会抛IndexOutOfBoundsException
  • firstOrNull —— 返回符合条件的第一个元素,没有 返回null
  • lastOrNull —— 返回符合条件的最后一个元素,没有 返回null
  • indexOf —— 返回指定元素的下标,没有 返回-1
  • singleOrNull —— 返回符合条件的单个元素,如有没有符合或超过一个,返回null

判断类

  • any —— 判断集合中 是否有满足条件 的元素
  • all —— 判断集合中的元素 是否都满足条件
  • none —— 判断集合中是否 都不满足条件,是则返回true
  • count —— 查询集合中 满足条件 的 元素个数
  • reduce —— 从 第一项到最后一项进行累计

过滤类

  • filter —— 过滤 掉所有 满足条件 的元素
  • filterNot —— 过滤所有不满足条件的元素
  • filterNotNull —— 过滤NULL
  • take —— 返回前 n 个元素

转换类

  • map —— 转换成另一个集合(与上面我们实现的 convert 方法作用一样);
  • mapIndexed —— 除了转换成另一个集合,还可以拿到Index(下标);
  • mapNotNull —— 执行转换前过滤掉 为 NULL 的元素
  • flatMap —— 自定义逻辑合并两个集合;
  • groupBy —— 按照某个条件分组,返回Map;

排序类

  • reversed —— 反序
  • sorted —— 升序
  • sortedBy —— 自定义排序
  • sortedDescending —— 降序

个人微信号:zhaoyanjun125 , 欢迎关注

Kotlin实战指南八:高阶函数相关推荐

  1. [译]Effective Kotlin系列之探索高阶函数中inline修饰符(三)

    简述: 不知道是否有小伙伴还记得我们之前的Effective Kotlin翻译系列,之前一直忙于赶时髦研究Kotlin 1.3中的新特性.把此系列耽搁了,赶完时髦了还是得踏实探究本质和基础,从今天开始 ...

  2. Kotlin 编程核心基石—高阶函数

    前言 1. 高阶函数有多重要? 高阶函数,在 Kotlin 里有着举足轻重的地位.它是 Kotlin 函数式编程的基石,它是各种框架的关键元素,比如:协程,Jetpack Compose,Gradle ...

  3. Kotlin学习三:高阶函数

    目录 一.高阶函数的基本概念 二.常见高阶函数 1.关于list映射 2.flatMap 3.综合1 4.综合2 三.尾递归优化 四.闭包 五.函数复合 六.科理化 七.偏函数 八.小案例 一.高阶函 ...

  4. Kotlin小知识之高阶函数

    文章目录 高阶函数 定义高阶函数 函数类型 高阶函数示例 内联函数 内联函数的作用 内联函数的用法 noinline与crossinline 高阶函数 定义高阶函数 高阶函数和Lambda的关系是密不 ...

  5. kotlin修炼指南8—集合中的高阶函数

    点击上方蓝字关注我,知识会给你力量 Kotlin对集合操作类新增了很多快捷的高阶函数操作,各种操作符让很多开发者傻傻分不清,特别是看一些Kotlin的源码或者是协程的源码,各种眼花缭乱的操作符,让代码 ...

  6. Kotlin中的高阶函数

    博客地址sguotao.top/Kotlin-2018- 在Kotlin中,高阶函数是指将一个函数作为另一个函数的参数或者返回值.如果用f(x).g(x)用来表示两个函数,那么高阶函数可以表示为f(g ...

  7. kotlin高阶函数的初级理解

    1.定义 如果一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,那么该函数就称为高阶函数. 系统中已经有很多,示例:库函数 在 Standard.kt 标准库中提供了一些便捷的内置高阶函数 ...

  8. kotlin 常用高阶函数

    package kotlinall.chapter5import java.io.BufferedReader import java.io.FileReader import java.lang.S ...

  9. Kotlin 使用高阶函数实现回调

    lambda 和 高阶函数 之前学习了 lambda 和高阶函数,然后在 android 开发中对 onClick 事件进行监听是一个很常用的功能,kotlin 的常规实现如下: rootView.s ...

最新文章

  1. 简明Linux命令行笔记:df
  2. html 在weblogic 上编译报错,HTTL在weblogic环境下,JDK版本1.7情况下。出现编译错误。...
  3. 笔记本电脑与漂亮老婆
  4. VC 创建NT服务程序
  5. mysql rpm server_记录一次最新版MySQL-server-5.6.20-1.el6.x86_64.rpm的安装
  6. iOS上线后程序崩溃日志处理-- Crashlytics
  7. 我们分析了5万多场英雄联盟比赛,教你如何轻松用Python预测胜负
  8. 支持hicar的华为手机
  9. python实现明星专家系统:人脸识别自动比对
  10. JNCIS翻译文档之------接口
  11. 【羊了个羊】什么!第二关难如上青天,能不能简单版??
  12. SPRING IN ACTION 第4版笔记-第八章Advanced Spring MVC-003-Pizza例子的基本流程
  13. gazebo仿真环境搭建+配置+小车运动仿真
  14. python web py入门(6)-webpy在模板里使用code代码段错误的问题
  15. 【DOS】通过for命令截取字符串
  16. 北京化工大学2022-2023-1 ACM集训队每周程序设计竞赛(8)题解
  17. \\wsl.localhost 无法访问
  18. 什么是银行的SWIFT代码
  19. Linux下xl710网卡驱动,CentOS 6.x 系统安装+网卡驱动安装(Realtek PCIe GBE Family Controller for Linux)...
  20. CSP考试复习:第二单元 基础算法 2.5 常见的递推关系!

热门文章

  1. php 输出excepion内容,带有消息“无法关闭zip文件php://输出”的PHPExcel_Writer_Exception...
  2. java布局管理怎么有图片_java-用于背景图像和文本的布局管理器
  3. yolo 负样本_目标检测介绍之YOLO与SSD
  4. python获取邮箱地址_Python操作邮箱
  5. 八十三、React简书项目:Styled-Components 与 Reset.css 的结合使用,完成Header布局
  6. kda 处理曲面地图绘制的问题
  7. selenium容易忽视的知识点
  8. 博士申请 | 加拿大麦吉尔大学丁俊老师招收机器学习全奖博士/硕士/实习生
  9. 北京内推 | 华为CloudAI机器视觉产品部招聘计算机视觉见习研究员
  10. 去伪存真:因果约束下的图神经网络泛化