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

Kotlin List 操作全面指南

在传统 Java 开发 List 相关的 API 中,有着样板代码冗长、缺乏链式调用、空安全等问题。

Kotlin 这门语言 为 List 提供了丰富的扩展函数,这些函数大大简化了集合操作,解决了传统 Java 集合 API 中的许多痛点。


一、基础操作

1. 创建 List

val list = listOf(1, 2, 3) // 不可变
val mutableList = mutableListOf(1, 2, 3) // 可变
val emptyList = emptyList<Int>() // 空列表

 2. 访问元素

val element = list[1]                 // index 访问
val elementOrNull = list.getOrNull(5) // index 访问元素(失败返回 null)val first = list.first()            // 访问第一个元素
val firstOrNull= list.firstOrNull() // 访问第一个元素(失败返回 null)val last = list.last()              // 访问最后一个元素
val lastOrNull= list.lastOrNull()   // 访问最后一个元素(失败返回 null)

二、转换操作

1. 映射转换

val doubled = list.map { it * 2 } // [1,2,3] → [2,4,6]

 在复杂的数据 bean list 中,使用 map 能快速提取某一个字段组成新的 list:

class Person(val name: String, val age: Int)val personList = mutableListOf<Person>().apply {add(Person("张三", 22))add(Person("李四", 28))
}
val nameList = personList.map { it.name } // ["张三", "李四"]
val ageList = personList.map { it.age }    // [22, 28]

2. 扁平化

val nested = listOf(listOf(1, 2), listOf(3, 4))
val flat = nested.flatten() // [1,2,3,4]
val flatMapped = nested.flatMap { it.map { it * 2 } } // [2,4,6,8]

三、过滤操作

1. 基本过滤

val list = listOf(1, 2, 3, 4, 5, 6, 7, 8)
val filterList = list.filter { it % 2 == 0 } // [2, 4, 6, 8]

 在复杂的数据 bean list 中,使用 filter 能快速根据业务条件的字段组成新的 list:

class Person(val name: String, val age: Int)val personList = mutableListOf<Person>().apply {add(Person("张三", 22))add(Person("李四", 28))add(Person("王五", 31))
}
val filterList = personList.filter{ it.age > 25 } // [Person("李四", 28), Person("王五", 31)]

2. 去重

val list = listOf(1, 2, 2, 3, 1)
val distinctList = list.distinct() // [1,2,3]

四、排序操作

1. 升/降序

val list = listOf(3, 1, 4, 1, 5)
val sorted = list.sorted()               // [1, 1, 3, 4, 5]  (升序排列)
val descending = list.sortedDescending() // [5, 4, 3, 1, 1]  (降序排列)

在复杂的数据 bean list 中,使用 sortedBy/sortedByDescending 能快速根据字段进行排序组成新的 list:

class Person(val name: String, val age: Int)val personList = mutableListOf<Person>().apply {add(Person("张三", 22))add(Person("王五", 31))add(Person("李四", 28))add(Person("老六", 20))
}
val ascendingList = personList.sortedBy { it.age } // [Person("老六", 20), Person("张三", 22), Person("李四", 28), Person("王五", 31)]
val DescendingList = personList.sortedByDescending { it.age } // [Person("王五", 31), Person("李四", 28), Person("张三", 22), Person("老六", 20)]

 2.反转顺序

val list = listOf('a', 'b', 'c')
list.reversed() // ['c', 'b', 'a']

五、聚合操作

1. 求和/平均

val list = listOf(1, 2, 3, 4)
val sum = list.sum()          // 10
val average = list.average()  // 2.5

在复杂的数据 bean list 中,使用 sumOf 能快速计算 list 中字段的总和

class Product(val name: String, val price: Int)val productList = mutableListOf<Product>().apply {add(Product("西红柿", 5))add(Product("香蕉", 7))add(Product("苹果", 3))add(Product("菠萝", 10))
}
val priceSum = list.sumOf { it.price } // 价格总和: 25

2. 最大/最小

val list = listOf(1, 2, 3, 4)
val min = list.min() // 最小值: 1
val max = list.max() // 最大值: 4

3. 统计

val list = listOf(1, 2, 3, 4)
val count = list.count { it >= 2 } // list中大于等于2的item数量: 3

六、查找操作

1. 查找元素

val list = listOf(1, 2, 3, 4, 5, 6)
val find = list.find { it > 3 } // 查找第一个大于3的数(失败返回null)

 在复杂的数据 bean list 中,使用 find 能快速寻找某个字段值对应的数据 bean:

class Person(val name: String, val age: Int)val personList = mutableListOf<Person>().apply {add(Person("张三", 22))add(Person("王五", 31))add(Person("李四", 28))add(Person("老六", 20))
}
val zhangsan = personList.find { it.name = "张三" } // 根据 name 查找 list 中的数据 bean

2. 条件检查

val list = listOf(1, 2, 3, 4, 5, 6)
val any = list.any { it > 7 } // list 中是否 有元素 大于7
val all = list.all { it > 0 } // list 中是否 所有元素 大于0

七、集合操作

1. 合并

val list1 = listOf(1, 2, 3, 4, 5, 6)
val list2 = listOf("a", "b")
val zip = list1.zip(list2)  // [(1, a), (2, b)]
val zipWithNext = list1.zipWithNext() // [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]

2. 集合运算

val list1 = listOf(1, 2, 3, 4, 5)
val list2 = listOf(5, 6, 7, 8, 9)
val union = list1 + list2              // 并集: [1, 2, 3, 4, 5, 5, 6, 7, 8, 9]
val intersect = list1.intersect(list2) // 交集: [5]
val subtract1 = list1.subtract(list2)  // 差集: [1, 2, 3, 4]
val subtract2 = list2.subtract(list1)  // 差集: [6, 7, 8, 9]

八、其他

1. 遍历

list.forEach { println(it) }
list.forEachIndexed { index, value -> println("$index: $value") }

2. 随机元素

val random = list.random()

3. 字符串连接

val list = listOf(1, 2, 3, 4, 5)
val joinToString = list.joinToString(", ", "[", "]") // [1, 2, 3, 4, 5]

相关文章:

Kotlin List 操作全面指南

在传统 Java 开发 List 相关的 API 中&#xff0c;有着样板代码冗长、缺乏链式调用、空安全等问题。 Kotlin 这门语言 为 List 提供了丰富的扩展函数&#xff0c;这些函数大大简化了集合操作&#xff0c;解决了传统 Java 集合 API 中的许多痛点。 一、基础操作 1. 创建 List …...

C++--范围for循环详解

范围 for 循环是 C11 引入的语法特性&#xff0c;用于简化遍历容器或数组元素的过程。它比传统 for 循环更简洁安全&#xff0c;特别适合初学者。以下是详细讲解&#xff1a; 基本语法 for (元素类型 变量名 : 容器/数组) {// 循环体&#xff08;使用变量名访问当前元素&#…...

ISO18436-2 CATII级振动分析师能力矩阵

ISO18436-2021是当前针对针对分析师的一个标准&#xff0c;它对振动分析师的能力和知识体系做了4级分类&#xff0c;这里给出的是一家公司响应ISO18436的CATII级标准&#xff0c;做的一个专题培训的教学大纲。摘自&#xff1a; 【振動噪音產學技術聯盟】04/19-23 ISO 18436-2…...

deepseek问答:torch.full() 函数详解

torch.full() 是 PyTorch 中用于创建指定形状、所有元素值都相同的新张量的核心函数。它在深度学习中有广泛应用&#xff0c;尤其是在初始化张量和创建特殊数据结构时。 函数签名 torch.full(size, fill_value, *, dtypeNone, layouttorch.strided, deviceNone, requires_gra…...

dvwa4——File Inclusion

LOW: 先随便点开一个文件&#xff0c;可以观察到url栏变成这样&#xff0c;说明?page是dvwa当前关卡用来加载文件的参数 http://10.24.8.35/DVWA/vulnerabilities/fi/?pagefile1.php 我们查看源码 &#xff0c;没有什么过滤&#xff0c;直接尝试访问其他文件 在url栏的pag…...

MYSQL 高级 SQL 技巧

高级 SQL 技巧 以下是一些高级 SQL 技巧&#xff0c;可以帮助优化查询、提高性能并解决复杂的数据处理问题。 使用窗口函数 窗口函数允许在查询结果的行上进行计算&#xff0c;而不会减少行数。常见的窗口函数包括 ROW_NUMBER()、RANK()、DENSE_RANK() 和聚合函数如 SUM() 与…...

Spring Boot养老院管理系统源码分享

概述 基于Spring Boot开发的养老院管理系统&#xff0c;该系统通过智能化管理模块&#xff0c;为养老机构提供高效运营解决方案。 主要内容 后台管理功能 系统后台功能完善&#xff0c;左侧导航栏涵盖首页、安全巡查管理、设备管理等模块。设备管理界面以表格形式清晰展示设…...

go|context源码解析

文章目录 Context接口Deadline()Done()Err()Value() canceler接口ctxemptyCtxcancelCtxtimerCtxvalueCtx 基本使用cancelCtxvalueCtx 首先看一下源码对“context”的描述&#xff0c; When a Context is canceled, all Contexts derived from it are also canceled. 当一个Cont…...

如何在PowerBI中使用Analyze in Excel

如何在PowerBI中使用Analyze in Excel 之前分享过如何使用DAXStudio将PowerBI与Excel连接 &#xff0c;今天介绍另外一个工具&#xff0c;也可以实现同样的功能&#xff0c;Analyze in Excel。 使用Analyze in Excel 第一步&#xff1a; 首先准备好一个PBIX文件&#xff0c…...

【学习记录】Element UI导入报错 * element-ui/lib/theme-chalk/index.css in ./src/main.js

文章目录 &#x1f4cc; 摘要⚠️ 问题描述&#x1f50d; 原因分析✅ 正常情况下的依赖结构❗ 问题根源 ✅ 解决方案✅ 方法一&#xff1a;使用 cnpm 安装 Element UI&#xff08;推荐&#xff09;步骤 1&#xff1a;全局安装 cnpm&#xff08;使用淘宝镜像&#xff09;步骤 2&…...

大模型分布式训练笔记(基于accelerate+deepspeed分布式训练解决方案)

文章目录 一、分布式训练基础与环境配置&#xff08;1&#xff09;分布式训练简介&#xff08;2&#xff09;如何进行分布式训练&#xff08;3&#xff09;分布式训练环境配置 二、数据并行-原理与实战&#xff08;pytorch框架的nn.DataParallel&#xff09;1&#xff09;data …...

鸿蒙UI开发——组件的自适应拉伸

1、概 述 针对常见的开发场景&#xff0c;ArkUI开发框架提供了非常多的自适应布局能力&#xff0c;这些布局可以独立使用&#xff0c;也可多种布局叠加使用。本文针对ArkUI提供的拉伸能力做简单讨论。 拉伸能力是指容器组件尺寸发生变化时&#xff0c;增加或减小的空间全部分…...

鸿蒙仓颉语言开发教程:自定义弹窗

假期第一天&#xff0c;祝大家端午节快乐。昨天观看了时代旗舰尊界S800的发布&#xff0c;不得不感慨这车真好啊&#xff5e; 放假闲来无事&#xff0c;继续跟大家分享仓颉语言的开发教程&#xff0c;今天介绍一下自定义弹窗。 仓颉语言中的自定义弹窗和ArkTs类似&#xff0c…...

meilisearch docker 简单安装

ElasticSearch平替 docker run -it -d -p 7700:7700 -v /home/dev/melisearch/meili_data:/meili_data -e MEILI_MASTER_KEYRhTX1pLPSKSn7KW9yf9u_MNKC0v1YKkmx2Sc6qSwbLQ getmeili/meilisearch:v1.13 MEILI_MASTER_KEYRhTX1pLPSKSn7KW9yf9u_MNKC0v1YKkmx2Sc6qSwbLQ …...

Python 数据分析与可视化实战:从数据清洗到图表呈现

目录 一、数据采集与初步探索 二、数据清洗的七种武器 1. 缺失值处理策略 2. 异常值检测与修正 3. 数据类型转换技巧 三、数据转换的魔法工坊 1. 透视表与交叉表 2. 窗口函数实战 3. 文本数据处理 四、可视化呈现的艺术 1. 基础图表进阶用法 2. 高级可视化方案 3.…...

机器学习数据降维方法

1.数据类型 2.如何选择降维方法进行数据降维 3.线性降维&#xff1a;主成分分析&#xff08;PCA&#xff09;、线性判别分析&#xff08;LDA&#xff09; 4.非线性降维 5.基于特征选择的降维 6.基于神经网络的降维 数据降维是将高维数据转换为低维表示的过程&#xff0c;旨在保…...

uefi和legacy有什么区别_从几方面分析uefi和legacy的区别

uefi和legacy是两种不同的引导方式,uefi是新式的BIOS&#xff0c;legacy是传统BIOS。你在UEFI模式下安装的系统&#xff0c;只能用UEFI模式引导&#xff1b;同理&#xff0c;如果你是在Legacy模式下安装的系统&#xff0c;也只能在legacy模式下进系统。uefi只支持64为系统且磁盘…...

Spring @Autowired自动装配的实现机制

Spring Autowired自动装配的实现机制 Autowired 注解实现原理详解一、Autowired 注解定义二、Qualifier 注解辅助指定 Bean 名称三、BeanFactory&#xff1a;按类型获取 Bean四、注入逻辑实现五、小结 源码见&#xff1a;mini-spring Autowired 注解实现原理详解 Autowired 的…...

Neo4j 数据可视化与洞察获取:原理、技术与实践指南

在关系密集型数据的分析领域&#xff0c;Neo4j 凭借其强大的图数据模型脱颖而出。然而&#xff0c;将复杂的连接关系转化为直观见解&#xff0c;需要专业的数据可视化技术和分析方法。本文将深入探讨 Neo4j 数据可视化的核心原理、关键技术、实用技巧以及结合图数据科学库&…...

一种基于性能建模的HADOOP配置调优策略

1.摘要 作为分布式系统基础架构的Hadoop为应用程序提供了一组稳定可靠的接口。该文作者提出了一种基于集成学习建模的Hadoop配置参数调优的方法。实验结果表明&#xff0c;该性能模型可以准确预测MapReduce应用程序的运行时间。采用提出的Hadoop配置参数方法调优后&#xff0c…...

【Stable Diffusion 1.5 】在 Unet 中每个 Cross Attention 块中的张量变化过程

系列文章目录 文章目录 系列文章目录前言特征图和注意力图的尺寸差异原因在Break-a-Scene中的具体实现总结 前言 特征图 (Latent) 尺寸和注意力图(attention map)尺寸在扩散模型中有差异&#xff0c;是由于模型架构和注意力机制的特性决定的。 特征图和注意力图的尺寸差异原…...

MySQL - Windows 中 MySQL 禁用开机自启,并在需要时手动启动

Windows 中 MySQL 禁用开机自启&#xff0c;并在需要时手动启动 打开服务管理器&#xff1a;在底部搜索栏输入【services.msc】 -> 点击【服务】 打开 MySQL 服务的属性管理&#xff1a;找到并右击 MySQL 服务 -> 点击【属性】 此时的 MySQL 服务&#xff1a;正在运行&a…...

前端下载文件,文件打不开的问题记录

需求&#xff1a; 下载是很常见的接口&#xff0c;但是经常存在下载的文件异常的问题。此处记录一个常见的错误。 分析&#xff1a; 1、接口请求需要配置{responseType: ‘blob’}&#xff0c;此时要求返回的格式为blob&#xff0c;进而进行下载。 const res await axios.…...

小白的进阶之路系列之十一----人工智能从初步到精通pytorch综合运用的讲解第四部分

本文将介绍如何用PyTorch构建模型 torch.nn.Module和torch.nn.Parameter 除了Parameter之外,本视频中讨论的所有类都是torch.nn.Module的子类。这是PyTorch基类,用于封装PyTorch模型及其组件的特定行为。 torch.nn.Module的一个重要行为是注册参数。如果特定的Module子类具…...

OpenCV CUDA模块霍夫变换------在 GPU 上执行概率霍夫变换检测图像中的线段端点类cv::cuda::HoughSegmentDetector

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::HoughSegmentDetector 是 OpenCV 的 CUDA 模块中一个非常重要的类&#xff0c;它用于在 GPU 上执行 概率霍夫变换&#xff08;Probabi…...

详解一下RabbitMQ中的channel.Publish

函数定义&#xff08;来自 github.com/streadway/amqp&#xff09; func (ch *Channel) Publish(exchange string,key string,mandatory bool,immediate bool,msg Publishing, ) error这个方法的作用是&#xff1a;向指定的交换机 exchange 发送一条消息 msg&#xff0c;带上路…...

硬件学习笔记--62 MCU的ECC功能简介

1. 基本概念 ECC&#xff08;Error Correction Code&#xff0c;错误校正码&#xff09;是MCU&#xff08;微控制器&#xff09;中用于检测和纠正存储器数据错误的硬件功能&#xff0c;主要应用于Flash、RAM、Cache等存储单元&#xff0c;确保数据在传输或存储过程中的可靠性。…...

Uiverse.io:免费UI组件库

Uiverse.io 完整使用指南:免费UI组件库的终极教程 🌟 什么是 Uiverse.io? Uiverse.io 是一个开源的UI组件库平台,为开发者和设计师提供了大量精美的、可直接使用的HTML/CSS组件。这个平台的特色在于所有组件都是由社区贡献的,完全免费,并且可以直接复制代码使用。 �…...

普中STM32F103ZET6开发攻略(四)

接续上文&#xff1a;普中STM32F103ZET6开发攻略&#xff08;三&#xff09;-CSDN博客 点关注不迷路哟。你的点赞、收藏&#xff0c;一键三连&#xff0c;是我持续更新的动力哟&#xff01;&#xff01;&#xff01; 目录 接续上文&#xff1a;普中STM32F103ZET6开发攻略&am…...

ck-editor5的研究 (5):优化-页面离开时提醒保存,顺便了解一下 Editor的生命周期 和 6大编辑器类型

前言 经过前面的 4 篇内容&#xff0c;我们已经慢慢对 CKEditor5 熟悉起来了。这篇文章&#xff0c;我们就来做一个优化&#xff0c;顺便再补几个知识点&#xff1a; 当用户离开时页面时&#xff0c;提醒他保存数据了解一下 CKEditor5 的 六大编辑器类型了解一下 editor 实例对…...