Kotlin 集合函数:map 和 first 的使用场景

news2025/4/8 1:29:40

Kotlin 提供了丰富的集合操作函数,使开发者可以更加简洁、高效地处理数据。其中,mapfirst 是两个常用的函数,分别用于转换集合和获取集合中的第一个元素。

1. map 的使用场景

场景 1:对象列表转换

在开发中,我们经常需要对列表中的对象进行转换,比如获取某个字段的值。

data class User(val id: Int, val name: String)

val users = listOf(
    User(1, "Alice"),
    User(2, "Bob"),
    User(3, "Charlie")
)

val names = users.map { it.name }
println(names) // 输出: [Alice, Bob, Charlie]

场景 2:数据格式转换

例如,我们有一个整数列表,需要将其转换为字符串列表。

val numbers = listOf(1, 2, 3, 4, 5)
val stringNumbers = numbers.map { "Number: $it" }
println(stringNumbers) // 输出: [Number: 1, Number: 2, Number: 3, Number: 4, Number: 5]

2. first 的使用场景

场景 1:获取符合条件的第一个元素

当我们希望获取列表中符合某个条件的第一个元素时,可以使用 first

val numbers = listOf(10, 20, 30, 40, 50)
val firstEven = numbers.first { it % 2 == 0 }
println(firstEven) // 输出: 10

如果列表为空或者找不到符合条件的元素,first 会抛出异常。因此,可以使用 firstOrNull 避免异常。

val emptyList = listOf<Int>()
val firstOrNull = emptyList.firstOrNull()
println(firstOrNull) // 输出: null

3. 其他常用集合函数

除了 mapfirst,Kotlin 还提供了许多强大的集合操作函数。

3.1 filter 过滤集合

filter 用于筛选符合条件的元素。

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

3.2 reduce 累积计算

reduce 用于聚合集合中的数据。

val numbers = listOf(1, 2, 3, 4, 5)
val sum = numbers.reduce { acc, num -> acc + num }
println(sum) // 输出: 15

3.3 fold 带初始值的累积计算

foldreduce 类似,但 fold 允许设置初始值。

val numbers = listOf(1, 2, 3, 4, 5)
val sumWithInitial = numbers.fold(10) { acc, num -> acc + num }
println(sumWithInitial) // 输出: 25

3.4 sortedBy 排序

sortedBy 可以对集合按照某个字段进行排序。

data class User(val name: String, val age: Int)

val users = listOf(
    User("Alice", 30),
    User("Bob", 25),
    User("Charlie", 28)
)

val sortedUsers = users.sortedBy { it.age }
println(sortedUsers) // 输出: [User(name=Bob, age=25), User(name=Charlie, age=28), User(name=Alice, age=30)]

3.5 joinToString 分割连接

joinToString() 是 Kotlin 集合(如 List)上的一个扩展函数,用于将集合中的元素连接成一个字符串,并可以自定义分隔符、前后缀等。

基本用法

val list = listOf("A", "B", "C")
val result = list.joinToString(", ")  // 用 ", " 连接元素
println(result)  
// 输出: A, B, C

常见用法

3.5.1 自定义分隔符

val numbers = listOf(1, 2, 3, 4)
println(numbers.joinToString(" - "))  
// 输出: 1 - 2 - 3 - 4

3.5.2 添加前缀和后缀

val words = listOf("Kotlin", "Java", "Python")
println(words.joinToString(", ", prefix = "[", postfix = "]"))
// 输出: [Kotlin, Java, Python]

3.5.3 限制输出个数并添加省略号

val letters = listOf("A", "B", "C", "D", "E")
println(letters.joinToString(", ", limit = 3, truncated = "..."))
// 输出: A, B, C, ...

3.5.4 自定义转换格式

data class Person(val name: String, val age: Int)

val people = listOf(Person("Alice", 25), Person("Bob", 30))
println(people.joinToString { "${it.name} (${it.age})" })
// 输出: Alice (25), Bob (30)

4. 结论

Kotlin 提供了许多强大的集合操作函数,其中 map 适用于转换集合,first 适用于获取符合条件的第一个元素。此外,filterreducefoldsortedBy 等函数可以帮助我们更高效地操作集合。在日常开发中,合理使用这些函数可以大大提高代码的可读性和简洁性。

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

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

相关文章

复古未来主义屏幕辉光像素化显示器反乌托邦效果PS(PSD)设计模板样机 Analog Retro-Futuristic Monitor Effect

这款模拟复古未来主义显示器效果直接取材于 90 年代赛博朋克电影中的黑客巢穴&#xff0c;将粗糙的屏幕辉光和像素化的魅力强势回归。它精准地模仿了老式阴极射线管显示器&#xff0c;能将任何图像变成故障频出的监控画面或高风险的指挥中心用户界面。和……在一起 2 个完全可编…

技术驱动革新,强力巨彩LED软模组助力创意显示

随着LED显示技术的不断突破&#xff0c;LED软模组因其独特的柔性特质和个性化显示效果&#xff0c;正逐渐成为各类应用场景的新宠。强力巨彩软模组R3.0H系列具备独特的可塑造型能力与技术创新&#xff0c;为商业展示、数字艺术、建筑装饰等领域开辟全新视觉表达空间。    LED…

Spark,HDFS概述

HDFS组成构架&#xff1a; 注&#xff1a; NameNode&#xff08;nn&#xff09;&#xff1a;就是 Master&#xff0c;它是一个主管、管理者。 (1) 管理 HDFS 的名称空间&#xff1b; (2) 配置副本策略。记录某些文件应该保持几个副本&#xff1b; (3) 管理数据块&#xff08;…

【数据结构】图论进阶:生成树、生成森林与权值网络的终极解析

图的基本概念 导读一、图中的树与森林1.1 生成树与生成森林1.1.1 生成树1.1.2 生成森林1.1.3 生成树、生成森林与连通分量结点的关系边的关系 1.2 有向图中的树与森林1.2.1 有向树与有向森林1.2.2 生产有向树与生成有向森林1.2.3 有向树与生成有向树的区别1.2.4 有向森林与生成…

C和C++(list)的链表初步

链表是构建其他复杂数据结构的基础&#xff0c;如栈、队列、图和哈希表等。通过对链表进行适当的扩展和修改&#xff0c;可以实现这些数据结构的功能。想学算法&#xff0c;数据结构&#xff0c;不会链表是万万不行的。这篇笔记是一名小白在学习时整理的。 C语言 链表部分 …

【KWDB创作者计划】_KaiwuDB 2.1.0 单节点裸机部署

大家好&#xff0c;这里是 DBA学习之路&#xff0c;专注于提升数据库运维效率。 目录 前言KWDB 介绍安装准备环境信息配置要求操作系统软件依赖端口要求安装包下载 部署 KWDB简单实用连接数据库创建数据库创建用户创建时序表 前言 今天无意间在墨天轮看到一个征文活动 征文大赛…

前端快速入门学习3——CSS介绍与选择器

1.概述 CSS全名是cascading style sheets,中文名层叠样式表。 用于定义网页样式和布局的样式表语言。 通过 CSS&#xff0c;你可以指定页面中各个元素的颜色、字体、大小、间距、边框、背景等样式&#xff0c;从而实现更精确的页面设计。 HTML与CSS的关系&#xff1a;HTML相当…

Redash:一个开源的数据查询与可视化工具

Redash 是一款免费开源的数据可视化与协作工具&#xff0c;可以帮助用户快速连接数据源、编写查询、生成图表并构建交互式仪表盘。它简化了数据探索和共享的过程&#xff0c;尤其适合需要团队协作的数据分析场景。 数据源 Redash 支持各种 SQL、NoSQL、大数据和 API 数据源&am…

嵌入式Linux驱动—— 1 GPIO配置

目录 1.GPIO操作 1.1 IO命名 1.2 GPIO 时钟使能&#xff08;CCM&#xff09; 1.3 IO 复用&#xff08;IOMUXC&#xff09; 1.4 IO 配置 1.5 GPIO 配置 1.GPIO操作 GPIO操作主要是以下流程&#xff1a; 使能某组GPIO模块&#xff08;GPIO1、2、...&#xff09;&#…

[ICLR 2025]Biologically Plausible Brain Graph Transformer

论文网址&#xff1a;Biologically Plausible Brain Graph Transformer 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 …

SpringBoot+MyBatis Plus+PageHelper+vue+mysql 实现用户信息增删改查功能

静态资源展示 &#xff08;1&#xff09;静态资源下载 &#xff08;2&#xff09;下载后文件放到resources/static 目录下 (3) main函数启动项目访问对应文件&#xff0c;http://127.0.0.1:8080/user-list.html 数据库添加表和数据 SET FOREIGN_KEY_CHECKS0;-- --------…

企业常用Linux服务搭建

1.需要两台centos 7服务器&#xff0c;一台部署DNS服务器&#xff0c;另一台部署ftp和Samba服务器。 2. 部署DNS 服务器​ #!/bin/bash# 更新系统 echo "更新系统..." sudo yum update -y# 安装 BIND 和相关工具 echo "安装 BIND 和相关工具..." sudo y…

Qwen-7B-Chat 本地化部署使用

通义千问 简介 通义千问是阿里云推出的超大规模语言模型&#xff0c;以下是其优缺点&#xff1a; 优点 强大的基础能力&#xff1a;具备语义理解与抽取、闲聊、上下文对话、生成与创作、知识与百科、代码、逻辑与推理、计算、角色扮演等多种能力。可以续写小说、编写邮件、解…

QGIS获取建筑矢量图-Able Software R2V

1.QGIS截图 说明&#xff1a;加载天地图矢量图层&#xff0c;然后进行截图。 2.Able Software R2V 说明&#xff1a;Able Software R2V 是一款​​将光栅图像&#xff08;如扫描图纸、航拍照片&#xff09;自动转换为矢量图形&#xff08;如DXF格式&#xff09;​​的软件&a…

form实现pdf文件转换成jpg文件

说明&#xff1a; 我希望将pdf文件转换成jpg文件 请去下载并安装 Ghostscript&#xff0c;gs10050w64.exe 配置环境变量&#xff1a;D:\Program Files\gs\gs10.05.0\bin 本地pdf路径&#xff1a;C:\Users\wangrusheng\Documents\name.pdf 输出文件目录&#xff1a;C:\Users\wan…

STM32单片机入门学习——第13节: [6-1] TIM定时中断

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.04.04 STM32开发板学习——第13节: [6-1] TIM定时中断 前言开发板说明引用解答和科普一…

【2】搭建k8s集群系列(二进制)之安装etcd数据库集群

一、etcd服务架构 Etcd 是一个分布式键值存储系统&#xff0c;Kubernetes 使用 Etcd 进行数据存储&#xff0c;所以先 准备一个 Etcd 数据库&#xff0c;为解决 Etcd 单点故障&#xff0c;应采用集群方式部署&#xff0c;这里使用 3 台组建集群&#xff0c;可容忍 1 台机器故障…

Linux常用命令详解:从基础到进阶

目录 一、引言 二、文件处理相关命令 &#xff08;一&#xff09;grep指令 &#xff08;二&#xff09;zip/unzip指令 ​编辑 &#xff08;三&#xff09;tar指令 &#xff08;四&#xff09;find指令 三、系统管理相关命令 &#xff08;一&#xff09;shutdown指…

基于spring boot的外卖系统的设计与实现【如何写论文思路与真正写出论文】

目录 系统开发实现链接&#xff1a; 背景与分析&#xff1a; 背景&#xff08;题目&#xff09;&#xff1a; 用户功能 配送员功能 管理员功能 分析&#xff1a; 过程&#xff08;主体展示为主&#xff0c;部分功能不一一展示&#xff09;&#xff1a; 目录 论文前面…

Kubernetes 存储 Downward API

1.介绍 1.提供容器元数据 比如我们 golang语言 我们说他会根据当前CPU的数量 以此去确认我们的进程 线程 和协程之间的关系 以此去释放我们当前CPU的更大的 这么一个并行任务的能力 但是这里会出现一个问题 容器它是把当前的应用 封装在我们固定的名称空间了 而且给它以特定的…