Android---Kotlin 学习007

集合可以方便你处理一组数据,也可以作为值参传给函数,和我们学过的其它变量类型一样,List、Set 和 Map 类型的变量也分为两类,只读和可变

List创建与元素获取

通过 listOf() 函数创建一个 List 集合。

    val listString : List<String> = listOf("HL", "HYM", "HMY")val listInt = listOf(1, 2, 3, 5)

在 kt 中获取 List 中的元素和 java 一样,listInt[index] 就可以获取 index 位置的元素。

通过索引获取 List 中的元素,那么就会存在 ArrayIndexOutOfBoundsException 异常。如下所示

fun main() {val listInt = listOf(1, 2, 3, 5)System.out.println(listInt[4]) // 显然 List 里没有索引为 4 的元素
}

对于这种情况,在 kotlin 里面提供了很多安全函数,来避免异常索引。

\bullet getOrElse:getOrElse 是一个安全索引取值函数,它需要两个参数,第一个是索引值,第二个是能提供默认值的 lambda 表达式,如果索引值不存在的话,可以用来 lambda 的默认值来替异常。

示例:

\bullet getOrNull:getOrNull 是 Kotlin 提供的另一个安全索引取值函数,它返回 null 结果,而不是抛出异常。

示例:

通过这两种方法,当我们不小心索引越界时,就不会抛出异常。

可变列表

在 Kotlin 中,支持内容修改的列表叫可变列表。要创建可变列表,可以使用 mutableListOf 函数。List。List 还支持使用 toList 和 toMutableList 函数,动态实现只读列表和可变列表的相互转换。

示例:创建可变 List,添加和删除元素。

fun main() {// MutableListval mutableIntList = mutableListOf(1, 2, 3, 4)mutableIntList.add(5)mutableIntList.remove(3) // 根据元素值移除mutableIntList.removeAt(0) // 根据索引移除}

示例:MutableList 和 List 互转

    listOf(1, 2, 3).toMutableList()mutableListOf(1, 2, 3).toList()

mutator 函数 

\bullet 能修改可变列表的函数有一个统一的名字:mutator 函数。比如上面的add()、remove() 函数以及后面的 removeIf() 函数等。

\bullet 添加元素运算符与删除元素运算符

    val mutableStringList = mutableListOf("jack", "bob", "jason")mutableStringList += "Jimmy" // 与 add() 相同mutableStringList -= "jack" // 与 remove() 相同println(mutableStringList)

\bullet 基于 lambda 表达式指定的条件删除元素。removeIf() 函数。

    val mutableStringList = mutableListOf("jack", "bob", "jason")mutableStringList += "Jimmy" // 与 add() 相同mutableStringList -= "jack" // 与 remove() 相同mutableStringList.removeIf { it.contains("jason") } // 如果包含 jason,则将其移除println(mutableStringList)

List 集合遍历

\bullet for in 遍历

示例:

    val list = listOf(3, 2, 5, 1)for (i in list) {print("$i, ")}

\bullet forEach 遍历

    list.forEach { print(it)}

\bullet forEachIndexed 遍历时要获取索引值

list.forEachIndexed{index, element ->println("$index, $element")}

解构语法过滤元素

通过"_"符号过滤不想要的元素

    // 这种写法,可以把 list 里的每个元素赋值给等号前面()里的变量val (one, two ,three) = listOf(3, 2, 1)// 有时我们不需要给()里的每个元素都赋值,而是给几个赋值。TODO 那么不需要赋值的变量就要 _ 代替val (a, _ ,c) = listOf(3, 2, 1)

解释说明:第二行代码中,我们不想给第二个变量赋值,则用 _ 来代替。

Set 创建与元素获取

通过 setOf 创建 set 集合,使用 elementAt 函数读取集合中的元素。

示例:set 取元素时也有 安全索引取值函数

fun main() {val intSet = setOf(1, 2, 3)intSet.forEach {print("$it, ")}// 取元素intSet.elementAt(1)// 取元素时也有 TODO 安全索引取值函数intSet.elementAtOrElse(4){"Unknown"}intSet.elementAtOrNull(3) ?: "Unknown" // 这里还可以和 空合并操作符 一起使用
}

可变 Set 集合

通过 mutableSetOf 创建可变的 set 集合。可变的操作与 List 是一样的。

示例:

    val mutableSet = mutableSetOf(1, 2, 3)mutableSet.add(4)mutableSet -= 3

集合转换与快捷函数

\bullet Set 和 List 是可以相互转换的。通过把 List 转换成 Set,去掉重复元素。

fun main() {val listName = listOf("jack", "bob", "lily", "jack").toSet() // 先转为 set 去重.toList() // 再由 set 转回 listprintln(listName)
}

\bullet 快捷函数。

上面方法的先 toSet() 然后再 toList 有点太麻烦了,kotlin 给我们提供了一个快捷函数 distinct(),直接一步搞定。

    val distinct : List<String> = listOf("jack", "bob", "lily", "jack").distinct()println(distinct)

注意:set 和 list 的区别是,list 中的元素可以重复,而 Set 中的元素是不重复的。即使往 set 集合中方重复的元素,set 会通过覆盖的方式来避免重复。

数组类型

Kotlin 提供各自 Array,虽然是引用类型,但可以编译成 Java 基本数据类型。

示例:

    // 创建 Int 类型数组val intArray : IntArray = intArrayOf(10, 13, 131)// list 也可以直接转为数组listOf(1, 2, 3).toIntArray()// 创建对象数组val array : Array<File> = arrayOf(File("D://xx.txt"), File("D://yy.txt"))

Map 集合

Map 的创建和 List、Set 不同,因为 Map 是键值对的形式,有 key 和 value。和 java 创建 map 也不一样,kotlin 中会用到 to。to 看上去像关键字,但事实上,它是个省略了点号和参数的特殊函数,to 函数将它左边和右边的值转化成一对 Pair。所以也可以直接调用 Pair() 函数。

示例:mapOf() 函数

    // Map 创建mapOf("Jack" to 12, "Bob" to 12, "lily" to 13)mapOf(Pair("Jack", 12), Pair("Bob", 12), Pair("Lily", 13))

读取 Map 的值

\bullet [] 取值运算符,读取键对应的值,如果键不存在就返回 null;

    val map = mapOf("Jack" to 12, "Bob" to 12, "lily" to 13)println(map["jack"])

\bullet getValue,读取键对应的值,如果键不存在就抛出异常;

    val map = mapOf("Jack" to 12, "Bob" to 12, "lily" to 13)println(map.getValue("Bob"))

\bullet getOrElse,读取键对应的值,或者使用匿名函数返回默认值;

    val map = mapOf("Jack" to 12, "Bob" to 12, "lily" to 13)println(map.getOrElse("Rose"){"Unknown"})

如果没有"Rose" 就返回 {}(匿名函数)里的内容

\bullet getOrDefault,读取键对应的值,或者返回默认值。

    val map = mapOf("Jack" to 12, "Bob" to 12, "lily" to 13)println(map.getOrDefault("lilys", 0))

遍历 Map

forEach 遍历 Map。

可变 Map 集合

\bullet 通过 mutableMapOf 创建可变 Map;

    val mutableMap = mutableMapOf("Jack" to 12, "Bob" to 12, "lily" to 13)mutableMap += "HL" to 17mutableMap.put("HYM", 18)

\bullet getOrPut 键值不存在,就添加并返回结果,否则就返回已有键对应的值。

// 如果没有 key 为 XY,那么就放入该键值对,如果有,则获取该键值对
mutableMap.getOrPut("XY"){19}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/223262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ShardingSphere数据分片之读写分离

1、概述 读写分离是一种常见的数据库架构&#xff0c;它将数据库分为主从库&#xff0c;一个主库&#xff08;Master&#xff09;用于写数据&#xff0c;多个从库&#xff08;Slave&#xff09;进行轮询读取数据的过程。主从库之间通过某种通讯机制进行数据的同步。 所以&…

React Native android环境搭建,使用夜神模拟器进行开发(适用于0.73+版本)

前言 本文基于&#xff1a;“react-native” : “^0.73.0” 1.安装 Node Node.js&#xff0c;下载时选择 > 18 版本 2.下载并安装 JDK Java SE Development Kit (JDK)&#xff0c;下载时选择 17 版本 安装 验证是否安装成功 打开命令提示符输入 javac -version 回车 3.…

re:Invent 产品体验与感受分享:Amazon ElastiCache Serverless 缓存的即时扩展

授权说明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在亚马逊云科技开发者社区、 知乎、自媒体平台、第三方开发者媒体等亚马逊云科技官方渠道&#xff09;。 文章目录 前言产品介绍产品使用步骤1.创建缓存服务2.安全组开放访问权限…

【Python】解读a+=b 和 a=a+b是否一样?看完恍然大悟!

文章目录 前言一、可变对象和不可变对象总结 前言 在Python中&#xff0c;对于可变和不可变对象的行为差异是一个重要概念&#xff0c;特别是在涉及到和操作时。理解这一点对于编写高效且无误的代码至关重要。 一、可变对象和不可变对象 首先&#xff0c;让我们谈谈可变和不可…

打工人副业变现秘籍,某多/某手变现底层引擎-Stable Diffusion替换背景

在Stable Diffusion软件中,使用ControlNet+模型实现固定物体批量替换背景 出图的流程。 一、准备好图片 1.你需要准备好一些白底图或者透明底图用于训练模型。 2.你需要准备同样角度的其他背景色底图用于ControlNet勾线 3.注意检查你的图片尺寸,是否为1:1,…

离散型随机变量的分布律(也称概率质量函数:probability mass function, PMF)

设是一个离散型随机变量&#xff0c;可能的取值为&#xff0c;取各个值的概率记为&#xff1a; &#xff08;1&#xff09; 其中 并且&#xff0c; 公式&#xff08;1&#xff09;就称为离散型随机变量的分布律&#xff0c;也称概率质量函数&#xff1a;probability ma…

svn使用步骤

服务器端主要用来创建仓库&#xff0c;然后供客户端去访问与下载。 客户端&#xff1a; 图形化界面的使用&#xff1a;这里使用的是tortoise工具 1.创建一个文件夹作为自己的本地仓库目录 2.鼠标右键文件夹&#xff0c;在菜单中点击SVN checkout 3.找个图 这一步骤相当于git中…

最新版xposed编写教程

环境&#xff1a; andriod studio2023.1.1 jdk17 gradle8.2 流程&#xff1a; 1.新建项目&#xff0c;选empty views activity即可&#xff08;其他也可&#xff09; 2.语言选java&#xff0c;其他路径名称等暗战自己需要随便改&#xff0c;然后点击finish 3.修改AndroidMan…

茶室茶楼计时计费软件,软件中的商品管理计时操作教程

一、前言 茶室在营业的时候&#xff0c;不但需要计时间&#xff0c;同时还需要管理商品入库出库库存等管理。这就需要一款实用的操作简单的管理软件。 下面以 佳易王茶社计时计费软件V18.0为例说明&#xff0c;其他版本可以参考本教程。 软件下载或技术支持可以点击最下方官…

和利时DCS数据采集

在工业自动化领域&#xff0c;和利时DCS&#xff08;分布式控制系统&#xff09;被广泛应用&#xff0c;它对于工厂的生产过程和设备管理起到了重要的作用。然而&#xff0c;对于和利时DCS数据的采集&#xff0c;很多工厂面临着一些难点。本文将介绍和利时DCS的概述&#xff0c…

C语言—每日选择题—Day42

第一题 1. 下面程序输出的结果是&#xff08;&#xff09; #include <stdio.h> int main () {int x;x printf("I See, Sea in C");printf("x%d" , x); } A&#xff1a;2 B&#xff1a;随机值 C&#xff1a;都不是 D&#xff1a;15 答案及解析 D p…

智慧港口解决方案:PPT全文69页,附下载

关键词&#xff1a;智慧港口解决方案&#xff0c;数字化港口&#xff0c;智慧港口发展现状与展望&#xff0c;智慧码头&#xff0c;智慧港口发展趋势 一、智慧港口建设背景 随着数字经济、智慧交通发展&#xff0c;强调“要大力发展智慧交通和智慧物流”“努力打造世界一流的…

LAMP与LNMP架构

目录 一、概述 二、各组件的主要作用 一. 编译安装Apache httpd服务 二. 编译安装mysqld 服务 三. 编译安装PHP 解析环境 四. 安装论坛 LNMP架构 一、编译安装Nginx 二、编译安装MySQL服务 三、安装配置php文件 四、部署论坛 扩展 fpm参数优化 一、概述 LAMP架构是…

TCP/IP详解——UDP 协议

文章目录 1. UDP1.1 UDP 头部1.2 UDP 校验和1.3 UDP 传输过程1.4 UDP-Lite1.5 最大 UDP 数据报长度1.6 UDP 输入队列 1. UDP UDP&#xff1a;用户数据报协议&#xff08;User Datagram Protocol&#xff09;面向无连接的&#xff0c;也就是无需建立连接&#xff0c;传输不可靠。…

宏景eHR SQL 注入漏洞复现(CVE-2023-6655)

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR 中发现了一种被分类为关键的漏洞,该漏洞影响了Login Interface组件中/w_selfservice/oauthservlet/%2e../.%2e/genera…

ICV:2023 年上半年全球量子计算的进展

​ 2023年上半年&#xff0c;量子计算&#xff08;QC&#xff09;领域取得了一系列重要进展和突破&#xff0c;显示出量子计算技术的快速发展和商业应用的不断拓展。本报告从制度进步、产业生态、投融资形势、总结与展望四个方面对量子计算领域进行了系统而详细的分析。报告不仅…

每天一点python——day94

#每天一点Python——94 #面向对象的三大特征——封装 封装&#xff1a;隐藏内部细节&#xff0c;对外提供操作方式。【提高程序的安全性】 继承&#xff1a;在函数调用时&#xff0c;使用’形参名称值‘的方式进行传参&#xff0c;传递参数的顺序可以与定义时参数顺序不同【提高…

push和扩展运算符...引发的问题

文章目录 一、问题二、原因三、解决3.1、使用拓展运算符...合并&#xff08;推荐使用&#xff09;3.2、使用concat合并3.3、循环push 四、最后 一、问题 const items [] const newItems new Array(1000000) items.push(...newItems)上面代码会出现如下错误&#xff1a; Unc…

从零开始搭建企业管理系统(七):RBAC 之用户管理

RBAC 之用户管理 创建表&#xff08;Entity&#xff09;用户表角色表权限表用户角色表关系注解ManyToMany 角色权限表 接口开发UserControllerUserServiceUserServiceImplUserRepository 问题解决update 更新问题懒加载问题JSON 循环依赖问题 根据上一小结对表的设计&#xff0…

【面试】测试/测开(NIG2)

145. linux打印前row行日志 参考&#xff1a;linux日志打印 前10行日志 head -n 10 xx.log后10行日志 tail -n 10 xx.log tail -10f xx.log使用sed命令 sed -n 9,10p xx.log #打印第9、10行使用awk命令 awk NR10 xx.log #打印第10行 awk NR>7 && NR<10 xx.log …