当前位置: 首页 > news >正文

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 是一门现代但已成熟的编程语言&#xff0c;旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作&#xff0c;并提供了多种方式在多个平台间复用代码&#xff0c;以实现高效编程。 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

来源&#xff1a;《斯坦福数据挖掘教程第三版》对应的公开英文书和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…...

天眼销:超有用的企业获客工具

天眼销是资深数据团队开发的一个客户资源查询平台&#xff0c;可以通过多重筛选&#xff1a;企业名称/信用代码&#xff0c;所在地区&#xff0c;行业&#xff0c;注册资本&#xff0c;年限&#xff0c;是否在营/有电话/邮箱等。 天眼销和某查查有什么区别&#xff1f; 天*查/…...

dbeaver连接amabri-hbase

目录 尝试过程 解决之道 总结 尝试过程 注意此章节为记录试错过程&#xff0c;无需跟随操作&#xff0c;仅作试错记录。真正操作方法请看“解决之道”章节 环境ambari安装的hbase2.1.6 使用apche phoenix默认驱动配置 备注&#xff1a;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…...

线性回归 梯度下降

梯度下降算法 在开始之前&#xff0c;为了方便解释&#xff0c;首先规定几个符号所代表的意义&#xff1a; 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个训练样本&#xff08;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 联合设计孵化&#xff0c;以跨境贸易和金融服务为场景的分布式可信数字凭证解决方案&#xff08;Distributed Trusted Digital Credential Solution&#xff09;&#xff0c;项目获得新加坡金管局&#xff08;Monetar…...

907. 子数组的最小值之和 --力扣 --JAVA

题目 给定一个整数数组 arr&#xff0c;找到 min(b) 的总和&#xff0c;其中 b 的范围为 arr 的每个&#xff08;连续&#xff09;子数组。 由于答案可能很大&#xff0c;因此 返回答案模 10^9 7 。 解题思路 找到以当前值为最小值所能组成的子数组&#xff1b;若存在两个相同…...

3D模型渲染导致电脑太卡怎么办?

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 1、什么是3D渲染&#xff1f; 3D渲染是指通过计算机图形学技术将三维模型转化为二维图像的过程…...

构建个人代理池:使用GitHub项目proxy_pool的搭建配置及代码接口详解

手把手教你搭建代理IP池&#xff1a; 项目简介&#xff1a; ​ 爬虫代理IP池项目,主要功能为定时采集网上发布的免费代理验证入库&#xff0c;定时验证入库的代理保证代理的可用性&#xff0c;提供API和CLI两种使用方式。同时你也可以扩展代理源以增加代理池IP的质量和数量。…...

Pytorch进阶教学——训练一个图像分类模型(GPU)

目录 1、前言 2、数据集介绍 3、获取数据 4、创建网络 5、训练模型 6、测试模型 6.1、测试整个模型准确率 6.2、测试单张图片 1、前言 编写一个可以分类蚂蚁和蜜蜂图片的模型&#xff0c;使用数据集对卷积神经网络进行训练。训练后的模型可以对蚂蚁或蜜蜂的图片进行…...

Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/5)

博主介绍&#xff1a;Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 &#x1f345;文末获取源码下载地址&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb;…...

Linux:windows 和 Linux 之间文本格式转换

背景 在 Windows 上编辑的文件&#xff0c;放到 Linux 平台&#xff0c;有时会出现奇怪的问题&#xff0c;其中有一个是 ^M 引起的&#xff0c;例如这种错误&#xff1a; /bin/bash^M: bad interpreter 这个问题相信大家也碰到过&#xff0c;原因是 Windows 和 Linux 关于换行的…...

VBA技术资料MF88:测试Excel文件名是否有效

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…...

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 语言中&#xff0c;panic、recover 和 defer 是用于处理异常情况的关键字。它们通常一起使用来实现对程序错误的处理和恢复。 1. defer 语句 defer 用于在函数返回之前执行一段代码。被 defer 修饰的语句或函数会在包含 defer 的函数执行完毕后执行。defer 常用于资源清…...

ubuntu20.04安装tensorRT流程梳理

目标&#xff1a;先跑demo&#xff0c;再学习源码 step1, 提前准备好CUDA环境 安装CUDA&#xff0c;cuDNN 注意&#xff0c;CUDA&#xff0c;cuDNN需要去官网下载.run和tar文件安装&#xff0c;否则在下面step4 make命令会报找不到cuda等的错误&#xff0c;具体安装教程网上…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...