kotlin first/last/indexOf/elementAt

kotlin 中

first 是取集合元素中第一个元素

last 是取集合元素中最后一个元素

indexOf 根据元素寻找下标,默认是第一个

elementAt 根据下标找元素

下面写一个demo 说明下他们几个的使用

复制代码
        val list = listOf("A", "D", "A", "B", "E", "C", "D", "C", "E", "F")
        //打印集合中的第一个元素
        Log.d("=======first", list.first().toString()) //打印结果是A
        //符合条件的第一个元素,根据谓词匹配
        Log.d("=======first{}", list.first { it =="D"})//打印结果是D
        //打印集合中的最后一个元素
        Log.d("=======last", list.last().toString()) //打印结果是F
        //符合条件的最后一个元素,根据谓词匹配
        Log.d("=======last{}", list.last { it =="D"})//打印结果是D
        //根据元素寻找下标,默认是第一个
        Log.d("=======indexOf", list.indexOf("D").toString()) //打印结果是1
        //集合中元素第一个是D的下标
        Log.d("=======indexOfFirst", list.indexOfFirst { it == "D" }.toString())//打印结果是1
        //集合中元素最后一个是D的下标
        Log.d("=======indexOfLast", list.indexOfLast { it == "D" }.toString())//打印结果是6
        //根据下标找元素
        Log.d("=======last", list.elementAt(3).toString()) //打印结果是B

上面的根据谓词匹配的demo 不明显下面重新写一个如下

复制代码
        val numbers = listOf("one", "two", "three", "four", "five")
        Log.d("======first", numbers.first { it.length > 3 }) //打印结果three
        Log.d("======last", numbers.last { it.length > 3 }) //打印结果five

有时候判断条件集合中没有的时候就会报错如下

val numbers = listOf("one", "two", "three", "four", "five")

Log.d("======first", numbers.first { it.length > 6 }) //报错 java.util.NoSuchElementException

这个时候可以使用

firstOrNull 判断条件符合返回元素如果不符合返回null 这样就不会报错了

lastOrNull 判断条件符合返回元素如果不符合返回null 这样就不会报错了

复制代码
        Log.d("======first", numbers.firstOrNull { it.length>6 }.toString()) //打印结果null
        Log.d("======last", numbers.lastOrNull { it.length>6  }.toString()) //打印结果null

elementAt 也有这种情况当给出的下标集合中不存在的时候也是会报错的比如

例如下面的就会报错

val numbers = listOf("one", "two", "three", "four", "five")

Log.d("======first", numbers.elementAt(8)) //报错

这种时候可以使用elementAtOrNull

elementAtOrNull的作用判断条件符合返回元素,不符合返回null

复制代码
        val numbers = listOf("one", "two", "three", "four", "five")
        Log.d("======first", numbers.elementAtOrNull(8).toString()) 

还有一个elementAtOrElse 还接受一个 lambda 表达式,该表达式能将一个 Int 参数映射为一个集合元素类型的实例。 当使用一个越界位置来调用时,elementAtOrElse() 返回对给定值调用该 lambda 表达式的结果。

复制代码
       val numbers = listOf("one", "two", "three", "four", "five")
        Log.d("======first", numbers.elementAtOrElse(5) { index -> "The value for index $index is undefined"})

打印结果:The value for index 5 is undefined

相关推荐
遇印记5 小时前
传输层,网络层
运维·服务器·网络·windows·学习
死磕音视频5 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
又見山6 小时前
Obsidian 跨平台同步实测:Nutstore Sync 在 Windows、Mac、Linux、iOS、Android 全平台综合测评
windows·macos·obsidian·obsidian同步·obsidian教程·obsidian入门·obsidian笔记库搭建
顽疲7 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
jearry8 小时前
一个编辑器两个内核:Markdown 实时视图与源码视图并存时的竞态、光标锚点与 PDF 导出
windows·markdown
Wang's Blog8 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
逆向编程8 小时前
DirectX修复工具下载安装教程-Windows系统DLL缺失检测修复完整图文步骤
windows
钱栈up9 小时前
电脑卡死7分钟,日志断在13:56:03:一次Windows硬挂死的根因复盘
windows
程序喵大人10 小时前
【C++入门】编译链接模型 - 07 链接器怎样把符号对上号
开发语言·c++·编译器·编译链接·链接器
微三云 - 廖会灵 (私域系统开发)10 小时前
供应链系统实战:多渠道订单聚合与分布式库存一致性方案总结
开发语言·分布式·php