Kotlin实战指南八:高阶函数
转载请标明出处: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
类,这个类只有两个字段,分别是 id
,name
,代码如下:
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实战指南八:高阶函数相关推荐
- [译]Effective Kotlin系列之探索高阶函数中inline修饰符(三)
简述: 不知道是否有小伙伴还记得我们之前的Effective Kotlin翻译系列,之前一直忙于赶时髦研究Kotlin 1.3中的新特性.把此系列耽搁了,赶完时髦了还是得踏实探究本质和基础,从今天开始 ...
- Kotlin 编程核心基石—高阶函数
前言 1. 高阶函数有多重要? 高阶函数,在 Kotlin 里有着举足轻重的地位.它是 Kotlin 函数式编程的基石,它是各种框架的关键元素,比如:协程,Jetpack Compose,Gradle ...
- Kotlin学习三:高阶函数
目录 一.高阶函数的基本概念 二.常见高阶函数 1.关于list映射 2.flatMap 3.综合1 4.综合2 三.尾递归优化 四.闭包 五.函数复合 六.科理化 七.偏函数 八.小案例 一.高阶函 ...
- Kotlin小知识之高阶函数
文章目录 高阶函数 定义高阶函数 函数类型 高阶函数示例 内联函数 内联函数的作用 内联函数的用法 noinline与crossinline 高阶函数 定义高阶函数 高阶函数和Lambda的关系是密不 ...
- kotlin修炼指南8—集合中的高阶函数
点击上方蓝字关注我,知识会给你力量 Kotlin对集合操作类新增了很多快捷的高阶函数操作,各种操作符让很多开发者傻傻分不清,特别是看一些Kotlin的源码或者是协程的源码,各种眼花缭乱的操作符,让代码 ...
- Kotlin中的高阶函数
博客地址sguotao.top/Kotlin-2018- 在Kotlin中,高阶函数是指将一个函数作为另一个函数的参数或者返回值.如果用f(x).g(x)用来表示两个函数,那么高阶函数可以表示为f(g ...
- kotlin高阶函数的初级理解
1.定义 如果一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,那么该函数就称为高阶函数. 系统中已经有很多,示例:库函数 在 Standard.kt 标准库中提供了一些便捷的内置高阶函数 ...
- kotlin 常用高阶函数
package kotlinall.chapter5import java.io.BufferedReader import java.io.FileReader import java.lang.S ...
- Kotlin 使用高阶函数实现回调
lambda 和 高阶函数 之前学习了 lambda 和高阶函数,然后在 android 开发中对 onClick 事件进行监听是一个很常用的功能,kotlin 的常规实现如下: rootView.s ...
最新文章
- 简明Linux命令行笔记:df
- html 在weblogic 上编译报错,HTTL在weblogic环境下,JDK版本1.7情况下。出现编译错误。...
- 笔记本电脑与漂亮老婆
- VC 创建NT服务程序
- mysql rpm server_记录一次最新版MySQL-server-5.6.20-1.el6.x86_64.rpm的安装
- iOS上线后程序崩溃日志处理-- Crashlytics
- 我们分析了5万多场英雄联盟比赛,教你如何轻松用Python预测胜负
- 支持hicar的华为手机
- python实现明星专家系统:人脸识别自动比对
- JNCIS翻译文档之------接口
- 【羊了个羊】什么!第二关难如上青天,能不能简单版??
- SPRING IN ACTION 第4版笔记-第八章Advanced Spring MVC-003-Pizza例子的基本流程
- gazebo仿真环境搭建+配置+小车运动仿真
- python web py入门(6)-webpy在模板里使用code代码段错误的问题
- 【DOS】通过for命令截取字符串
- 北京化工大学2022-2023-1 ACM集训队每周程序设计竞赛(8)题解
- \\wsl.localhost 无法访问
- 什么是银行的SWIFT代码
- Linux下xl710网卡驱动,CentOS 6.x 系统安装+网卡驱动安装(Realtek PCIe GBE Family Controller for Linux)...
- CSP考试复习:第二单元 基础算法 2.5 常见的递推关系!
热门文章
- php 输出excepion内容,带有消息“无法关闭zip文件php://输出”的PHPExcel_Writer_Exception...
- java布局管理怎么有图片_java-用于背景图像和文本的布局管理器
- yolo 负样本_目标检测介绍之YOLO与SSD
- python获取邮箱地址_Python操作邮箱
- 八十三、React简书项目:Styled-Components 与 Reset.css 的结合使用,完成Header布局
- kda 处理曲面地图绘制的问题
- selenium容易忽视的知识点
- 博士申请 | 加拿大麦吉尔大学丁俊老师招收机器学习全奖博士/硕士/实习生
- 北京内推 | 华为CloudAI机器视觉产品部招聘计算机视觉见习研究员
- 去伪存真:因果约束下的图神经网络泛化