Kotlin中的集合操作

Kotlin 在集合操作上提供了一系列的扩展函数,使其变得非常强大且易于使用。以下是一些在Kotlin中常用的集合操作API,以及如何使用它们的示例:

1. Filtering (过滤)

​ 使用 filter 函数来过滤集合中符合条件的元素。

val numbers = listOf(1, 2, 3, 4, 5, 6)
val evenNumbers = numbers.filter { it % 2 == 0 } // 结果: [2, 4, 6]

2. Transforming (转换)

​ 使用 map 函数能够将集合中的元素进行转换。

val numbers = listOf(1, 2, 3, 4, 5, 6)
val squaredNumbers = numbers.map { it * it } // 结果: [1, 4, 9, 16, 25, 36]

3. Flattening (扁平化)

​ 对于嵌套集合,flatten 可以用来将嵌套的集合合并成一个集合,而 flatMap 可以在合并的同时进行转换。

val numberSets = listOf(setOf(1, 2, 3), setOf(4, 5, 6))
val flattened = numberSets.flatten() // 结果: [1, 2, 3, 4, 5, 6]val container = listOf(listOf(1), listOf(2, 3), listOf(4, 5, 6))
val flattenedAndTransformed = container.flatMap { it.map { it * it } } // 结果: [1, 4, 9, 16, 25, 36]

4. Zipping (配对)

zip 函数能将两个集合中的元素按位置配对成一个新的集合。

val a = listOf(1, 2, 3)
val b = listOf("a", "b", "c")
val resultPairs = a.zip(b) // 结果: [(1, "a"), (2, "b"), (3, "c")]

5. Associating (关联)

associateWithassociateBy 用于生成Map,前者将每个元素作为键与某个值关联,后者则是将某个键与每个元素关联。

val numbers = listOf(1, 2, 3)
val numberToSquare = numbers.associateWith { it * it } // 结果: {1=1, 2=4, 3=9}val names = listOf("Alice", "Bob", "Clara")
val nameToLength = names.associateBy { it.length } // 结果: {5=Alice, 3=Bob, 5=Clara}

6. Aggregating (聚合)

foldreduce 可用于根据一个起始值(对于 fold)或集合的一个初始元素(对于 reduce)逐个组合集合中的元素。

val numbers = listOf(1, 2, 3, 4, 5, 6)
val sum = numbers.reduce { total, next -> total + next } // 结果: 21val startValue = 0
val sumWithStart = numbers.fold(startValue) { total, next -> total + next } // 结果: 21

7. Chunks (分块)

chunked 可以将集合分割为指定大小的小集合。

val numbers = (1..10).toList()
val chunks = numbers.chunked(3) // 结果: [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]

8. Grouping (分组)

groupBy 根据指定条件将集合中的元素分组。

val numbers = listOf("one", "two", "three", "four", "five")
val groupedByLength = numbers.groupBy { it.length } // 结果: {3=["one", "two"], 5=["three"], 4=["four", "five"]}

9. 取集合的各种部分 (Slicing)

​ 可以使用 slice 函数从集合中获取一系列特定的元素。

val numbers = listOf(1, 2, 3, 4, 5, 6)
val sliced = numbers.slice(1..3) // 结果: [2, 3, 4]

10. 去重 (Distinct)

distinct 函数用于去除集合中的重复元素。

val numbers = listOf(1, 2, 2, 3, 4, 4, 5)
val distinctNumbers = numbers.distinct() // 结果: [1, 2, 3, 4, 5]

11. 可变集合操作 (Mutable Collections)

​ 对于可变集合,可以使用 add, remove, addAll, removeAll, retainAll 等函数来直接修改集合。

val mutableListOfNumbers = mutableListOf(1, 2, 3)
mutableListOfNumbers.add(4) // 结果: [1, 2, 3, 4]
mutableListOfNumbers.remove(1) // 结果: [2, 3, 4]

12. Partitioning (分区)

partition 将集合分成两个集合,第一个集合包含符合某个条件的所有元素,第二个集合中则包含所有不符合这个条件的元素。

val numbers = (1..10).toList()
val (even, odd) = numbers.partition { it % 2 == 0 } // even: [2, 4, 6, 8, 10], odd: [1, 3, 5, 7, 9]

13. 排序 (Sorting)

​ 集合可以按自然顺序或给定的比较器进行排序。

val numbers = listOf(5, 4, 2, 1, 3)
val sortedNumbers = numbers.sorted() // 结果: [1, 2, 3, 4, 5]val descendingSortedNumbers = numbers.sortedByDescending { it } // 结果: [5, 4, 3, 2, 1]

14. 判断集合元素的条件 (Any, All, None)

any, allnone 分别用来检查集合中是否有元素满足条件,是否所有元素满足条件,或者是否没有元素满足条件。

val numbers = listOf(1, 2, 3, 4, 5, 6)
val anyGreaterThanFour = numbers.any { it > 4 } // 结果: true
val allEvenNumbers = numbers.all { it % 2 == 0 } // 结果: false
val noneGreaterThanSix = numbers.none { it > 6 } // 结果: true

15. 取集合的极值 (Min and Max)

​ 可以使用 minOrNullmaxOrNull 函数快速找到集合中的最小值和最大值。

val numbers = listOf(1, 2, 3, 4, 5, 6)
val maxNumber = numbers.maxOrNull() // 结果: 6
val minNumber = numbers.minOrNull() // 结果: 1

16. 取集合中符合条件的单个元素 (Single Element)

​ 你可以用 first, firstOrNull, last, 和 lastOrNull 来获取集合中的第一个或最后一个符合条件的元素。

val numbers = listOf(1, 2, 3, 4, 5, 6)
val firstEven = numbers.firstOrNull { it % 2 == 0 } // 结果: 2
val lastLessThanFive = numbers.lastOrNull { it < 5 } // 结果: 4

17. 迭代 (Iteration)

​ 可以使用 forEach 函数对集合进行迭代操作。

val numbers = listOf(1, 2, 3, 4, 5)
numbers.forEach { println(it) } // 输出每个元素

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

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

相关文章

故事生成动漫解说视频,用Artflow AI做英语口语故事

大家好我是在看&#xff0c;记录普通人学习探索AI之路。 今天&#xff0c;我将再次为大家精心策划一个使用Artflow AI制作动漫解说视频的详尽教程&#xff0c;这个教程专为初学者设计。通过这款强大的Artflow AI工具&#xff0c;用户能够一键自动化完成从图像生成、视频剪辑到配…

MySQL连接查询深度解析:内连接、左连接、右连接、全连接

在数据库设计和查询中&#xff0c;连接&#xff08;JOIN&#xff09;是一个核心概念&#xff0c;它允许我们将不同表中的数据组合在一起&#xff0c;形成一个有意义的结果集。在MySQL中&#xff0c;我们通常会使用四种类型的连接&#xff1a;内连接&#xff08;INNER JOIN&…

性能测试LoadRunner解决动态验证码问题

对于这个问题&#xff0c;通常我们可以采取以下三个途径来解决该问题&#xff1a; 1、第一种方法&#xff0c;也是最容易想到的&#xff0c;在被测系统中暂时屏蔽验证功能&#xff0c;也就是说&#xff0c;临时修改应用&#xff0c;无论用户输入的是什么验证码&#xff0c;都…

【hcie-cloud】【21】容器详解【容器网络说明、容器存储说明、容器镜像说明、dockerfile详述、缩略词】【下】

文章目录 容器介绍&#xff0c;容器工作机制、容器常用命令说明容器网络容器网络简介容器常用网络类型 - Bridge容器常用网络类型 - Host容器常用网络类型 - None其他容器网络类型【Macvlan、Overlay、IPvlan】容器网络相关配置 容器存储容器中应用数据的存储容器持久化存储配置…

2023年AI的飞速发展(上)

目录 1.ChatGPT&#xff1a; 2.Transformer、Bert&#xff1a; 3.Bard、Office 365 Copilot、LLAMA&#xff1a; 4.Claude、Grok&#xff1a; 1.ChatGPT&#xff1a; 2023年被视为人类科技史上的一个重要年份&#xff0c;可能标志着新一轮工业革命的开端。这一年&#xff…

2024.1.8每日一题

LeetCode 回旋镖的数量 447. 回旋镖的数量 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定平面上 n 对 互不相同 的点 points &#xff0c;其中 points[i] [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 &#xff0c;其中 i 和 j 之间的距离和 i 和 k 之间的欧式…

Python - 深夜数据结构与算法之 Two-Ended BFS

目录 一.引言 二.双向 BFS 简介 1.双向遍历示例 2.搜索模版回顾 三.经典算法实战 1.Word-Ladder [127] 2.Min-Gen-Mutation [433] 四.总结 一.引言 DFS、BFS 是常见的初级搜索方式&#xff0c;为了提高搜索效率&#xff0c;衍生了剪枝、双向 BFS 以及 A* 即启发式搜索…

【办公技巧】Word中如何对齐选择题中的ABCD选项?

使用word文件制作试卷&#xff0c;如何将ABCD选项全部设置对齐&#xff1f;除了一直按空格或者Tab键以外&#xff0c;还有其他方法吗&#xff1f;今天分享如何将ABCD选项对齐。 首先&#xff0c;我们打开【替换和查找】&#xff0c;在查找内容输入空格&#xff0c;然后点击全部…

2024年工信部AI人工智能证书“计算机视觉工程师”证书报考中!

为进一步贯彻落实中共中央印发《关于深化人才发展体制机制改革的意见》和国务院印发《关于“十四五”数字经济发展规划》等有关工作的部署求&#xff0c;深入实施人才强国战略和创新驱动发展战略&#xff0c;加强全国数字化人才队伍建设&#xff0c;持续推进人工智能专业人员能…

FreeRTOS——任务管理

学习目标 理解任务管理机制掌握动态任务创建掌握任务删除掌握任务挂起和恢复了解静态任务创建了解任务调度机制了解临界区的概念学习内容 任务处理常见操作 操作 API 动态任务创建 xTaskCreate 任务删除 vTaskDelete 静态任务创建 vTaskCreateStatic 挂起任务 vTaskSuspend 恢…

视频做成二维码查看?多格式视频二维码生成器的使用方法

现在音视频是工作和生活中经常需要使用的一种内容表现形式&#xff0c;很多人都通过这种方式来查看视频内容&#xff0c;比如产品介绍、使用说明、安装教程等。通过一个二维码就可以来承载视频内容&#xff0c;与传统的方式相比拥有更快的内容传播速度&#xff0c;简化用户获取…

【刷题笔记2】

刷题笔记2 最小公倍数、最大公约数 两个数的最大公约数两数乘积/最小公倍数 #<include> cmath; int a,b; int mgcd(a,b);//求最大公约数复制字符串substr()函数 s.substr(pos, len) &#xff1a;pos的默认值是0&#xff0c;len的默认值是s.size() - pos string a1;in…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷⑧

2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷8 目录 需要竞赛软件包环境以及备赛资源可私信博主&#xff01;&#xff01;&#xff01; 2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷8 模块一 …

创业只有破釜沉舟才能成功吗?2024个人创业做什么?2024普通人如何创业?

第一次创业必须零成本&#xff0c;千万别被那些砸锅卖铁、卖车卖房创业最后发了大财的鸡汤故事洗了脑&#xff0c;否则你一定会血本无归&#xff0c;妻离子散。 如果你要创业&#xff0c;请记住这组数据&#xff0c;全国能活过三年的创业公司只有10%&#xff0c;这10%不等于已经…

C# 自定义配置文件序列化生成+文件格式错误自动回档

文章目录 前言选择Xml简单的Xml使用测试用例简单的写简单的读简单的生成配置修改配置类测试用例运行结果对比 代码逻辑封装逻辑示意封装好的代码测试生成配置文件格式错误测试使用默认值覆盖来解决问题 配置文件人为修改错误如何解决解决方案代码测试用例运行结果 代码封装总结…

uni-app实现一键登录(企业版:因为获取手机号功能**目前针对非个人开发者**,所以个人开发者无法唤起获取手机号界面)

微信授权登录 用户在使用小程序时&#xff0c;其实已登录微信&#xff0c;其本质上就是&#xff1a;微信授权给小程序读取微信用户信息。 获取登录凭证&#xff08;企业版&#xff09; 前端&#xff1a;调用 wx.login() 接口获取登录凭证&#xff08;code&#xff09;。 后…

数据结构期末复习笔记

文章目录 数据结构期末复习第一章&#xff1a;数据结构绪论第二章&#xff1a;顺序表与单链表第三章&#xff1a;其它链表第四章&#xff1a;栈如何中缀转后缀后缀如何计算 第五章&#xff1a;队列第六章&#xff1a;串第七章&#xff1a;树的概念和遍历第八章&#xff1a;赫夫…

muduo网络库剖析——网络地址InetAddress类

muduo网络库剖析——网络地址InetAddress类 前情从muduo到my_muduo 概要socketaddr_in介绍成员用法 网络地址转换函数 框架与细节成员函数使用方法 源码结尾 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库&#xff0c;考虑的肯定是众多情况是否可以高效满足&…

flutter的状态管理学习

文章目录 1.flutter widget分类2. 代理组件又分为3. 状态 state 数据4. 刷新 数据变化5. code 1.flutter widget分类 组合渲染代理 2. 代理组件又分为 Positioned向父组件传递数据InheritedWidget向子组件传递数据 3. 状态 state 数据 状态就是用到了向子组件传递数据&#xff…

在矩池云使用微调ChatGLM3-6B教程

今天给大家介绍下如何在矩池云使用ChatGLM3-6B模型。 1 简介 GitHub&#xff1a;https://github.com/THUDM/ChatGLM3 魔搭&#xff1a;https://modelscope.cn/models/ZhipuAI/chatglm3-6b/ ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的新一代对话预训练模型。ChatGLM3…