Kotlin 集合函數:map 和 first 的使用場景

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.pswp.cn/pingmian/75421.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75421.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/75421.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

EIR管理中IMEI和IMSI信息的作用

在EIR&#xff08;設備身份注冊&#xff09;管理中&#xff0c;IMEI&#xff08;國際移動設備身份碼&#xff09;和IMSI&#xff08;國際移動用戶識別碼&#xff09;各自具有重要作用&#xff0c;以下是詳細介紹&#xff1a; IMEI的作用 設備身份識別&#xff1a;IMEI是移動設…

MAUI開發第一個app的需求解析:登錄+版本更新,用于喂給AI

vscode中MAUI框架已經搭好,用MAUI+c#webapi+orcl數據庫開發一個app, 功能是兩個界面一個登錄界面,登錄注冊常用功能,另一個主窗體,功能先空著,顯示“主要功能窗體”。 這是一個全新的功能,需要重零開始涉及所有數據表 登錄后檢查是否有新版本程序,自動更新功能。 1.用戶…

KUKA機器人查看運行日志的方法

對于KUKA機器人的運行日志都是可以查看和導出的&#xff0c;方便查找問題。KUKA機器人的運行日志查看方法如下&#xff1a; 1、在主菜單下&#xff0c;選擇【診斷】-【運行日志】-【顯示】下打開&#xff1b; 2、顯示出之前的機器人運行日志&#xff1b; 3、也可以通過【過濾器…

Kali Linux 2025.1a:主題煥新與樹莓派支持的深度解析

一、年度主題更新與桌面環境升級 Kali Linux 2025.1a作為2025年的首個版本&#xff0c;延續了每年刷新主題的傳統。本次更新包含全新的啟動菜單、登錄界面及桌面壁紙&#xff0c;涵蓋Kali標準版和Kali Purple版本。用戶可通過安裝kali-community-wallpapers包獲取社區貢獻的額…

【UVM學習筆記】更加靈活的UVM—通信

系列文章目錄 【UVM學習筆記】UVM基礎—一文告訴你UVM的組成部分 【UVM學習筆記】UVM中的“類” 文章目錄 系列文章目錄前言一、TLM是什么&#xff1f;二、put操作2.1、建立PORT和EXPORT的連接2.2 IMP組件 三、get操作四、transport端口五、nonblocking端口六、analysis端口七…

uni-app項目上傳至gitee方法詳細教程

1. 準備工作 1.1 安裝 Git 下載并安裝 Git&#xff1a;前往 Git 官網&#xff0c;根據操作系統下載安裝包。 配置用戶名和郵箱&#xff08;需與 Gitee 賬號一致&#xff09;&#xff1a; git config --global user.name "你的Gitee用戶名" git config --global use…

走向多模態AI之路(三):多模態 AI 的挑戰與未來

目錄 前言一、多模態 AI 真的成熟了嗎&#xff1f;二、多模態 AI 的主要挑戰2.1 計算資源消耗&#xff1a;模型復雜度帶來的成本問題2.2 數據標注困難&#xff1a;跨模態數據集的挑戰2.3 對齊和融合的難點2.4 泛化能力與魯棒性2.5 倫理與隱私問題 三、研究方向與未來發展3.1 輕…

STM32單片機入門學習——第12節: [5-2]對射式紅外傳感器計次旋轉編碼器計次

寫這個文章是用來學習的,記錄一下我的學習過程。希望我能一直堅持下去,我只是一個小白,只是想好好學習,我知道這會很難&#xff0c;但我還是想去做&#xff01; 本文寫于&#xff1a;2025.04.03 STM32開發板學習——第12節: [5-2]對射式紅外傳感器計次&旋轉編碼器計次 前言…

匯編學習之《jcc指令》

JCC&#xff08;Jump on Condition Code&#xff09;指的是條件跳轉指令&#xff0c;c中的就是if-else, while, for 等分支循環條件判斷的邏輯。它包括很多指令集&#xff0c;各自都不太一樣&#xff0c;接下來我盡量將每一個指令的c 源碼和匯編代碼結合起來看&#xff0c;加深…

深度解析算法之滑動窗口

12滑動窗口—將 x 減到 0 的最小操作數 題目傳送門 題目描述&#xff1a; 給你一個整數數組 nums 和一個整數 x 。每一次操作時&#xff0c;你應當移除數組 nums 最左邊或最右邊的元素&#xff0c;然后從 x 中減去該元素的值。請注意&#xff0c;需要 修改 數組以供接下來的操…

[MySQL初階]MySQL表的操作

MySQL表的操作 1. 創建表2. 查看表結構3. 修改表&#xff08;修改表的屬性而非表的數據&#xff09;4. 刪除表 1. 創建表 語法&#xff1a; CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校驗規則 engine 存儲…

sqlalchemy詳細介紹以及使用方法

SQLAlchemy是一個Python的ORM&#xff08;對象關系映射&#xff09;工具&#xff0c;它允許開發者使用Python代碼來操作數據庫而不必直接編寫SQL語句。SQLAlchemy提供了一種抽象層&#xff0c;使開發者可以通過簡單的Python對象來表示數據庫表和記錄&#xff0c;從而實現對數據…

圖解AUTOSAR_SWS_LINDriver

AUTOSAR LIN驅動詳解文檔 基于AUTOSAR標準的本地互聯網絡(LIN)驅動程序技術規范解析 目錄 1. 概述 1.1 AUTOSAR LIN驅動簡介1.2 LIN協議基礎2. LIN驅動架構 2.1 類圖結構2.2 狀態機設計3. LIN幀結構 3.1 基本幀組成3.2 PID結構4. LIN驅動配置 4.1 主要配置參數4.2 配置結構5. L…

《網絡管理》實踐環節03:snmp服務器上對網絡設備和服務器進行初步監控

蘭生幽谷&#xff0c;不為莫服而不芳&#xff1b; 君子行義&#xff0c;不為莫知而止休。 應用拓撲圖 3.0準備工作 所有Linux服務器上&#xff08;服務器和Agent端&#xff09;安裝下列工具 yum -y install net-snmp net-snmp-utils 保證所有的HCL網絡設備和服務器相互間能…

2025年內外網文件交換系統排名分析

在時代&#xff0c;企業的日常運營離不開內外網文件的交換。然而&#xff0c;傳統的文件傳輸方式難以滿足企業對多方面的要求。以下是一些備受關注的內外網文件交換系統及其排名分析。 第一名&#xff1a;陽途內外網文件交換系統 陽途內外網文件交換系統是一款專為解決內外網…

【Centos】centos7內核升級-親測有效

相關資源 通過網盤分享的文件&#xff1a;腳本升級 鏈接: https://pan.baidu.com/s/1yrCnflT-xWhAPVQRx8_YUg?pwd52xy 提取碼: 52xy –來自百度網盤超級會員v5的分享 使用教程 將腳本文件上傳到服務器的一個目錄 執行更新命令 yum install -y linux-firmware執行腳本即可 …

Qt進階開發:QDirModel的使用

文章目錄 一、QDirModel的基本介紹二、QDirModel的基本使用2.1 在 QTreeView 中顯示文件系統2.2 在 QListView 顯示當前目錄2.3 在 QTableView 中使用 三、QDirModel的常用API1. 構造 & 目錄操作1.1 創建 QDirModel1.2 設置根目錄 2. 過濾 & 排序2.1 過濾文件類型2.2 設…

牛客 除2問題

除2&#xff01; 貪心堆 讓偶數入堆 注意點&#xff1a; 1.判斷堆是否為空再進行操作 2. 為了防止超時&#xff0c;我們采取先求和的方式&#xff0c;后面調整之后再減掉&#xff0c;可以節省一次遍歷的時間。 3.注意數據范圍&#xff0c;要用long long #include<iost…

#MySQL 語句大全(完整實用教程)

&#x1f4cc; MySQL 語句大全&#xff08;完整實用教程&#xff09; &#x1f4cc; 1. 數據庫操作 ? 創建數據庫 CREATE DATABASE mydb; -- 創建名為 mydb 的數據庫? 使用數據庫 USE mydb; -- 選擇數據庫? 刪除數據庫 DROP DATABASE mydb; -- 刪除數據庫&#xff08…

萬字重談C++——類和對象篇

什么是類&#xff1f; 在編程中&#xff0c;類是用來創建對象的模板。可以把類看作一個藍圖&#xff0c;它定義了對象的屬性&#xff08;特征&#xff09;和方法&#xff08;行為&#xff09;。例如&#xff0c;如果我們有一個“學生”的類&#xff0c;它可能包含學生的名字、…