Kotlin学习——kt里的集合List,Set,Map List集合的各种方法之Int篇

Kotlin 是一门现代但已成熟的编程语言,旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作,并提供了多种方式在多个平台间复用代码,以实现高效编程。
https://play.kotlinlang.org/byExample/01_introduction/02_Functions
其他关于kt的博客文章如下:
- Kotlin学习——hello kotlin & 函数function & 变量 & 类 + 泛型 + 继承
- Kotlin学习——流程控制,when,循环,range工具 & kt里的equals & if实现类似三元表达式的效果
- Kotlin学习——kt中的类,数据类 & 枚举类 & 密封类,以及对象
- Kotlin学习——kt里面的函数,高阶函数 & 函数式编程 & 扩展函数和属性
目录
- 引出
- kotlin里的集合
- List
- Set
- Map
- List集合的各种方法
- filter过滤
- map 所有元素
- any,all,none
- first,last首尾
- count统计
- partition隔断
- minOrNul,maxOrNull 最小和最大
- sort排序
- getOrElse 安全访问
- 所有代码
- 总结
引出
1.kt里的集合List,Set,Map,可变集合和不可变集合;
2.list集合支持的各种方法,类似于Java里面的流stream;
kotlin里的集合
List
列表是项目的有序集合。在Kotlin中,列表可以是可变的(MutableList),也可以是只读的(List)。对于列表创建,对于只读列表使用标准库函数listOf(),对于可变列表使用mutableListOf()。为了防止不必要的修改,可以通过将可变列表强制转换为List来获得可变列表的只读视图。
package com.tianju.collKt// 创建一个可变列表
val systemUsers: MutableList<Int> = mutableListOf(1, 2, 3)
// 不可变列表,不能改变元素,相当于只读列表
val sudoers: List<Int> = systemUsers/*** 可变列表可以增加元素*/
fun addSystemUser(newUser: Int) {systemUsers.add(newUser)
}/*** 返回只读列表*/
fun getSysSudoers(): List<Int> {return sudoers
}fun main() {addSystemUser(4)println("Tot sudoers: ${getSysSudoers().size}")getSysSudoers().forEach {i -> println("Some useful info on user $i")}
}
Set
set是不支持重复项的无序集合
package com.tianju.collKtval openIssues: MutableSet<String> = mutableSetOf("uniqueDescr1", "uniqueDescr2", "uniqueDescr3")/*** 给set 里面添加元素*/
fun addIssue(uniqueDesc: String): Boolean {return openIssues.add(uniqueDesc)
}/*** 返回日志*/
fun getStatusLog(isAdded: Boolean): String {return if (isAdded) "registered correctly." else "marked as duplicate and rejected."
}fun main() {val aNewIssue: String = "uniqueDescr4"val anIssueAlreadyIn: String = "uniqueDescr2"println("Issue $aNewIssue ${getStatusLog(addIssue(aNewIssue))}")println("Issue $anIssueAlreadyIn ${getStatusLog(addIssue(anIssueAlreadyIn))}")
}
Map
映射是键/值对的集合,其中每个键都是唯一的,用于检索相应的值。对于创建映射,有函数mapOf()和mutableMapOf()。使用to infix函数可以减少初始化的噪声。可变映射的只读视图可以通过将其强制转换为map来获得。
package com.tianju.collKtconst val POINTS_X_PASS: Int = 15
val EZPassAccounts: MutableMap<Int, Int> = mutableMapOf(1 to 100, 2 to 100, 3 to 100)
// 创建一个只读map
val EZPassReport: Map<Int, Int> = EZPassAccountsfun updatePointsCredit(accountId: Int) {// 检查key是否存在if (EZPassAccounts.containsKey(accountId)) {println("Updating $accountId...")EZPassAccounts[accountId] = EZPassAccounts.getValue(accountId) + POINTS_X_PASS} else {println("Error: Trying to update a non-existing account (id: $accountId)")}
}// 打印key:value
fun accountsReport() {println("EZ-Pass report:")EZPassReport.forEach {k, v -> println("ID $k: credit $v")}
}fun main() {accountsReport()updatePointsCredit(1)updatePointsCredit(1)updatePointsCredit(5)accountsReport()
}
List集合的各种方法
filter过滤
val nums = listOf(1,3,5,6,3,-4,-3)// 过滤
val postNums = nums.filter { x -> x>0 }
val negNums = nums.filter { it < 0 }
map 所有元素
// map函数,作用于所有元素
val doubled = nums.map { x->x*2 }
val tripled = nums.map { it*3 }
any,all,none
返回值为Boolean
// any, all, none
// 返回值为Boolean 布尔
val anyPost = nums.any { it>0 }
val allEven = nums.all { it%2 ==0 }
val allLess6 = nums.none { it>7 }
first,last首尾
// 第一个元素,最后一个元素
val firstNum = nums.first()
val lastNum = nums.last()
// 可以传一个表达式
val firstEven = nums.first { it%2==0 }
count统计
// count
val totalNums = nums.count()
val evenCount = nums.count {it%2==0}
partition隔断
按照条件分割成两个阵营
// partition 隔断
// ([6, -4], [1, 3, 5, 3, -3])
val evenOdd = nums.partition { it%2 ==0 }
println(evenOdd.first)
minOrNul,maxOrNull 最小和最大
minOrNull和maxOrNull函数返回集合中最小和最大的元素。如果集合为空,则返回null。
// minOrNull和maxOrNull函数返回集合中最小和最大的元素。如果集合为空,则返回null。
val numbers = listOf(1, 2, 3)
val empty = emptyList<Int>()
val only = listOf(3)
sort排序
// 排序sorted
val shuffled = listOf(5, 4, 2, 1, 3, -10)
val natural = shuffled.sorted()
// 取负数后排序
val inverted = shuffled.sortedBy { -it }
// 顺序
val descending = shuffled.sortedDescending()
val descendingBy = shuffled.sortedByDescending { kotlin.math.abs(it) }
getOrElse 安全访问
getOrElse提供对集合元素的安全访问。它采用一个索引和一个函数,该函数在索引越界时提供默认值。
// getOrElse
val get1 = nums.getOrElse(1){56}
val get100 = nums.getOrElse(100){200}
所有代码
package com.tianju.collKtval nums = listOf(1,3,5,6,3,-4,-3)// 过滤
val postNums = nums.filter { x -> x>0 }
val negNums = nums.filter { it < 0 }// map函数,作用于所有元素
val doubled = nums.map { x->x*2 }
val tripled = nums.map { it*3 }// any, all, none
// 返回值为Boolean 布尔
val anyPost = nums.any { it>0 }
val allEven = nums.all { it%2 ==0 }
val allLess6 = nums.none { it>7 }// 第一个元素,最后一个元素
val firstNum = nums.first()
val lastNum = nums.last()
// 可以传一个表达式
val firstEven = nums.first { it%2==0 }// count
val totalNums = nums.count()
val evenCount = nums.count {it%2==0}// partition 隔断
// ([6, -4], [1, 3, 5, 3, -3])
val evenOdd = nums.partition { it%2 ==0 }// minOrNull和maxOrNull函数返回集合中最小和最大的元素。如果集合为空,则返回null。
val numbers = listOf(1, 2, 3)
val empty = emptyList<Int>()
val only = listOf(3)// 排序sorted
val shuffled = listOf(5, 4, 2, 1, 3, -10)
val natural = shuffled.sorted()
// 取负数后排序
val inverted = shuffled.sortedBy { -it }
// 顺序
val descending = shuffled.sortedDescending()
val descendingBy = shuffled.sortedByDescending { kotlin.math.abs(it) }// getOrElse
val get1 = nums.getOrElse(1){56}
val get100 = nums.getOrElse(100){200}fun main() {println("positives is $postNums")println(tripled)println(anyPost)println(allEven)println(allLess6)println(firstEven)println()println(evenOdd)println(evenOdd.first)println("Numbers: $numbers, min = ${numbers.minOrNull()} max = ${numbers.maxOrNull()}")println("Empty: $empty, min = ${empty.minOrNull()}, max = ${empty.maxOrNull()}")println("Only: $only, min = ${only.minOrNull()}, max = ${only.maxOrNull()}")println(get100)
}
总结
1.kt里的集合List,Set,Map,可变集合和不可变集合;
2.list集合支持的各种方法,类似于Java里面的流stream;
相关文章:
Kotlin学习——kt里的集合List,Set,Map List集合的各种方法之Int篇
Kotlin 是一门现代但已成熟的编程语言,旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作,并提供了多种方式在多个平台间复用代码,以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…...
docker buildx跨架构构建笔记(x86_64构建下构建aarch64镜像)
docker buildx跨架构构建(x86_64构建aarch64镜像) 文章目录 docker buildx跨架构构建(x86_64构建aarch64镜像)简介第一步 先交叉编译一个aarch64的HelloWorld程序。准备一个用于跨架构的Dockerfile文件使用docker buildx命令构建aarch64架构的镜像。查看镜像具体详细信息&#…...
Sass基础知识详细讲解【附带表图】
文章目录 前言使用 SassRack / Rails / Merb插件缓存选项语法选择编码 Sass CSS扩展Sass 注释输出 Sass 脚本Sass -规则和指令Sass 控制指令和表达式 Sass 混入指令Sass 功能指令命名约定Sass 输出样式:nested:expanded:compact:compressedSass 扩展缓存存储自定义导入 后言 前…...
《斯坦福数据挖掘教程·第三版》读书笔记(英文版)Chapter 3 Finding Similar Items
来源:《斯坦福数据挖掘教程第三版》对应的公开英文书和PPT It is therefore a pleasant surprise to learn of a family of techniques called locality-sensitive hashing, or LSH, that allows us to focus on pairs that are likely to be similar, without hav…...
天眼销:超有用的企业获客工具
天眼销是资深数据团队开发的一个客户资源查询平台,可以通过多重筛选:企业名称/信用代码,所在地区,行业,注册资本,年限,是否在营/有电话/邮箱等。 天眼销和某查查有什么区别? 天*查/…...
dbeaver连接amabri-hbase
目录 尝试过程 解决之道 总结 尝试过程 注意此章节为记录试错过程,无需跟随操作,仅作试错记录。真正操作方法请看“解决之道”章节 环境ambari安装的hbase2.1.6 使用apche phoenix默认驱动配置 备注:Apache Phoenix 是一个开源的、基于…...
Mac IDEA解决Maven项目命令行报错:command not found: mvn
1. 使用idea自带的maven命令 open -e ~/.zshrc 2. 在其最下面增加 # maven export MAVEN_HOME"/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3" export PATH$MAVEN_HOME/bin:$PATH # maven end 3. 连接使之生效 source ~/.zshrc4. 修改mvn…...
线性回归 梯度下降
梯度下降算法 在开始之前,为了方便解释,首先规定几个符号所代表的意义: m m m 训练集中训练样本的数量 X X X 输入变量 Y Y Y 输出变量 ( x , y ) (x,y) (x,y) 训练样本 ( x i , y i ) (x^i,y^i) (xi,yi)第i个训练样本(i表示…...
[Linux]进程等待
文章目录 3.进程等待3.1什么是进程等待3.2为什么要进程等待3.3如何进行进程等待?1.wait2.waitpid2.1函数的讲解2.2status的理解2.3代码理解 3.4学后而思1.直接用全局变量获取子进程退出码可以吗?如下2.进程具有独立性 退出码是子进程的数据 父进程是如何拿到退出码的3.对内存…...
Project DESFT 白皮书中文版——应用于普惠金融的可信数字凭证解决方案
1. 概述 Project DESFT 是由 Solv 基金会与 zCloak Network 联合设计孵化,以跨境贸易和金融服务为场景的分布式可信数字凭证解决方案(Distributed Trusted Digital Credential Solution),项目获得新加坡金管局(Monetar…...
907. 子数组的最小值之和 --力扣 --JAVA
题目 给定一个整数数组 arr,找到 min(b) 的总和,其中 b 的范围为 arr 的每个(连续)子数组。 由于答案可能很大,因此 返回答案模 10^9 7 。 解题思路 找到以当前值为最小值所能组成的子数组;若存在两个相同…...
3D模型渲染导致电脑太卡怎么办?
在线工具推荐: 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 1、什么是3D渲染? 3D渲染是指通过计算机图形学技术将三维模型转化为二维图像的过程…...
构建个人代理池:使用GitHub项目proxy_pool的搭建配置及代码接口详解
手把手教你搭建代理IP池: 项目简介: 爬虫代理IP池项目,主要功能为定时采集网上发布的免费代理验证入库,定时验证入库的代理保证代理的可用性,提供API和CLI两种使用方式。同时你也可以扩展代理源以增加代理池IP的质量和数量。…...
Pytorch进阶教学——训练一个图像分类模型(GPU)
目录 1、前言 2、数据集介绍 3、获取数据 4、创建网络 5、训练模型 6、测试模型 6.1、测试整个模型准确率 6.2、测试单张图片 1、前言 编写一个可以分类蚂蚁和蜜蜂图片的模型,使用数据集对卷积神经网络进行训练。训练后的模型可以对蚂蚁或蜜蜂的图片进行…...
Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/5)
博主介绍:Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 🍅文末获取源码下载地址🍅 👇🏻 精彩专栏推荐订阅👇🏻…...
Linux:windows 和 Linux 之间文本格式转换
背景 在 Windows 上编辑的文件,放到 Linux 平台,有时会出现奇怪的问题,其中有一个是 ^M 引起的,例如这种错误: /bin/bash^M: bad interpreter 这个问题相信大家也碰到过,原因是 Windows 和 Linux 关于换行的…...
VBA技术资料MF88:测试Excel文件名是否有效
我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…...
u8g2图形库——丝滑菜单制作
目录 一、实物效果展示 二、丝滑菜单实现原理 三、代码开源 1.ui_bmp.h 2.ui.h 3.ui.c 一、实物效果展示 u8g2图形库——丝滑菜单制作 二、丝滑菜单实现原理 int ui_run(short *a,short *a_tag,uint8_t step,uint8_t slow_cnt) //UI滑动效果 {uint8_t temp;…...
Go 异常处理流程
在 Go 语言中,panic、recover 和 defer 是用于处理异常情况的关键字。它们通常一起使用来实现对程序错误的处理和恢复。 1. defer 语句 defer 用于在函数返回之前执行一段代码。被 defer 修饰的语句或函数会在包含 defer 的函数执行完毕后执行。defer 常用于资源清…...
ubuntu20.04安装tensorRT流程梳理
目标:先跑demo,再学习源码 step1, 提前准备好CUDA环境 安装CUDA,cuDNN 注意,CUDA,cuDNN需要去官网下载.run和tar文件安装,否则在下面step4 make命令会报找不到cuda等的错误,具体安装教程网上…...
cv_unet_image-colorization图像上色入门必看:纯本地运行无网络依赖实操手册
cv_unet_image-colorization图像上色入门必看:纯本地运行无网络依赖实操手册 本文总计约3800字,完整阅读约需12分钟,包含详细的环境配置、操作步骤和实用技巧,适合零基础用户快速上手。 1. 引言:让黑白照片重现光彩 你…...
Redis Sentinel 高可用方案在WMS仓储管理系统的应用
Redis Sentinel 高可用方案在WMS仓储管理系统的应用 一、仓储场景的特殊挑战 在WMS(Warehouse Management System)系统中,Redis承载着高频且关键的业务数据:业务模块Redis用途可用性要求库存实时缓存SKU库存量、库位占用状态99.99…...
GNSS导航信号模拟器 卫星导航定位模拟器 GNSS卫星导航定位信号模拟器行业应用解决方案 GNSS模拟器
随着全球卫星导航系统的全面建设与深度应用,各类卫星导航定位授时终端已广泛渗透到交通、物联网、通信、测绘、消费电子等众多领域。但在终端产品的研发、测试、量产全流程中,行业长期面临诸多核心痛点:传统外场实地测试模式需投入大量人力物…...
破解土地-生态耦合难题,从数据处理到SCI论文:AI辅助下PLUS-InVEST模型土地利用格局模拟与生态系统服务
做土地利用、生态系统服务、国土空间规划的同学,是不是经常遇到这些问题:PLUS 模型装不上、跑不通、参数看不懂InVEST 产水 / 土壤保持 / 碳储量 / 生境质量数据总是报错ArcGIS 栅格处理、投影转换、重分类一头雾水多情景模拟不会设计,结果不…...
告别重复输入:快马助你打造高效openclaw命令管理工具
最近在团队协作中频繁使用openclaw工具时,发现每次手动输入冗长的命令参数特别容易出错,尤其是当需要切换不同环境配置时,常常因为输错一个参数导致整个流程卡住。于是决定用Python开发一个小工具来提升操作效率,顺便把实现过程记…...
PCB封装核心构成—焊盘,电气连接的基石
在电子设计与制造领域,PCB 封装是连接虚拟电路设计与实体元器件的关键纽带,而焊盘则是 PCB 封装中最核心、最基础的构成要素,堪称电气连接的 “基石”。没有精准设计的焊盘,元器件与电路板之间的电气连接便无从谈起,整…...
修改 WindTerm 快捷键配置为Ctrl+V / Ctrl+C
为了让 复制 / 粘贴 的快捷键更符合 Windows 的使用习惯,可以按下面的方法修改 WindTerm 的配置文件。 一、找到配置文件 先进入 WindTerm 的安装目录,然后依次打开: global 文件夹 在该文件夹中找到以下配置文件之一: wind.keyma…...
GIS底图大全
数据名称:GIS底图大全数据分类:文档资料网盘链接:通过百度网盘分享的文件:GIS底图.zi…链接:https://pan.baidu.com/s/1-Ko3uEp5IN7YJOSHd8cqaA 提取码:fhwb复制这段内容打开「百度网盘APP 即可获取」数据来源:来源于网…...
Notepad-- 终极中文编辑器:从零开始打造你的专属高效文本工作流
Notepad-- 终极中文编辑器:从零开始打造你的专属高效文本工作流 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器,目标是做中国人自己的编辑器,来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- …...
4大维度全面掌控Cyber Engine Tweaks:打造专属赛博朋克2077体验
4大维度全面掌控Cyber Engine Tweaks:打造专属赛博朋克2077体验 【免费下载链接】CyberEngineTweaks Cyberpunk 2077 tweaks, hacks and scripting framework 项目地址: https://gitcode.com/gh_mirrors/cy/CyberEngineTweaks 🌟 引擎核心&#x…...
