Kotlin 集合过滤全指南:all、any、filter 及高级用法
在 Kotlin 中,集合过滤是数据处理的核心操作之一。无论是简单的条件筛选,还是复杂的多条件组合,Kotlin 都提供了丰富的 API。本文将详细介绍 filter
、all
、any
、none
等操作符的用法,并展示如何在实际开发中灵活运用它们。
1. 基础过滤:filter
filter
是最常用的集合过滤方法,用于筛选满足条件的元素。
基本用法
val numbers = listOf(1, 2, 3, 4, 5, 6)// 过滤偶数
val evenNumbers = numbers.filter { it % 2 == 0 }
println(evenNumbers) // [2, 4, 6]
结合 map
进行转换
val names = listOf("Alice", "Bob", "Charlie")// 过滤长度 > 3 并转为大写
val result = names.filter { it.length > 3 }.map { it.uppercase() }
println(result) // ["ALICE", "CHARLIE"]
2. 多条件过滤
AND 逻辑(全部符合)
使用 &&
或 all
实现多条件同时满足:
data class Product(val name: String, val price: Double, val inStock: Boolean)val products = listOf(Product("iPhone", 999.0, true),Product("Shoes", 59.99, false),Product("Laptop", 1200.0, true)
)// 过滤价格 < 1000 且库存充足的商品
val affordableAndInStock = products.filter { it.price < 1000 && it.inStock }
println(affordableAndInStock) // [Product(name=iPhone, price=999.0, inStock=true)]
OR 逻辑(符合其中一个)
使用 ||
或 any
实现至少满足一个条件:
// 过滤价格 < 100 或库存为 false 的商品
val cheapOrOutOfStock = products.filter { it.price < 100 || !it.inStock }
println(cheapOrOutOfStock) // [Product(name=Shoes, price=59.99, inStock=false)]
3. 高级过滤操作
all
:检查所有元素是否满足条件
val numbers = listOf(10, 20, 30)// 是否所有数字 > 5?
val allGreaterThan5 = numbers.all { it > 5 }
println(allGreaterThan5) // true
any
:检查是否有任意元素满足条件
// 是否有数字 > 25?
val anyGreaterThan25 = numbers.any { it > 25 }
println(anyGreaterThan25) // true
none
:检查是否没有元素满足条件
// 是否没有数字 > 50?
val noneGreaterThan50 = numbers.none { it > 50 }
println(noneGreaterThan50) // true
4. 复杂场景:动态条件过滤
如果需要根据运行时条件动态过滤,可以使用高阶函数:
data class Person(val name: String, val age: Int, val city: String)val people = listOf(Person("Alice", 25, "New York"),Person("Bob", 30, "London"),Person("Charlie", 20, "Paris")
)// 动态条件列表
val conditions = listOf<Person.() -> Boolean>({ age >= 20 },{ city == "London" || city == "Paris" }
)// 过滤满足所有条件的人
val filteredPeople = people.filter { person ->conditions.all { condition -> condition(person) }
}
println(filteredPeople) // [Bob, Charlie]
5. 性能优化
使用 asSequence
进行惰性计算
val bigList = (1..1_000_000).toList()// 惰性过滤,提高性能
val result = bigList.asSequence().filter { it % 2 == 0 }.take(10).toList()
println(result) // [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
预编译正则表达式(适用于 Regex
过滤)
val regexList = listOf(Regex("^A.*"), Regex(".*e$"))val names = listOf("Alice", "Bob", "Eve", "Anna")// 匹配任意一个正则
val matchedNames = names.filter { name ->regexList.any { it.matches(name) }
}
println(matchedNames) // ["Alice", "Anna"]
6. 实际应用:RecyclerView 搜索过滤
在 Android 开发中,filter
常用于 RecyclerView
的搜索功能:
class UserAdapter(private var users: List<User>) : RecyclerView.Adapter<UserAdapter.ViewHolder>() {fun filter(query: String) {users = users.filter { it.name.contains(query, ignoreCase = true) }notifyDataSetChanged()}// ... 其他 Adapter 代码
}
总结
需求 | 方法 | 示例 |
---|---|---|
简单过滤 | filter | list.filter { it > 5 } |
多条件 AND | && 或 all | filter { it.price > 100 && it.inStock } |
多条件 OR | || 或 any | filter { it.price < 100 || !it.inStock } |
反向过滤 | none | list.none { it.isEmpty() } |
动态条件 | 高阶函数 | conditions.all { it(item) } |
性能优化 | asSequence | bigList.asSequence().filter { ... } |
通过灵活组合这些操作符,你可以轻松应对各种集合过滤需求!
相关文章:
Kotlin 集合过滤全指南:all、any、filter 及高级用法
在 Kotlin 中,集合过滤是数据处理的核心操作之一。无论是简单的条件筛选,还是复杂的多条件组合,Kotlin 都提供了丰富的 API。本文将详细介绍 filter、all、any、none 等操作符的用法,并展示如何在实际开发中灵活运用它们。 1. 基础…...
【lerobot】3-开源SO-100 主从臂的舵机位置校正、遥控操作(ubuntu系统)
官方从零教程:https://github.com/huggingface/lerobot/blob/main/examples/10_use_so100.md 8-lerobot aloha装配完毕如何进行遥操作 需要先完成的 组装好了so-100 2个机械臂下载安装了lerobot的代码环境:固定好主从臂,通过usb链接到同一个…...
影刀RPA证书题库包含初级、中级、高级和AP初级
影刀rpa初级证书选择题答案,影刀证书答案,影刀rpa考试,影刀初级考试,影刀初级考试选择题 原因 以前的在线题库https://exam.ezrpa.store/是为了方便更新题目和使用的,但经过实际使用发现大部分人“不会用”࿱…...
LR(0)
LR0就是当我处在自动机为红色这些结束状态的时候,这些红色状态就代表我们识别到了一个句柄,那现在的问题就是识别到了句柄,那要不要对他进行归约?LR0就是我不管当前指针指向的终结符是什么,我都拿它做规约 这里的二号状…...
基于 Python 和 OpenCV 技术的疲劳驾驶检测系统(2.0 全新升级,附源码)
大家好,我是徐师兄,一个有着7年大厂经验的程序员,也是一名热衷于分享干货的技术爱好者。平时我在 CSDN、掘金、华为云、阿里云和 InfoQ 等平台分享我的心得体会。 🍅文末获取源码联系🍅 2025年最全的计算机软件毕业设计…...
Matplotlib库详解
Matplotlib 是 Python 里一个特别常用的绘图库,它能帮你创建各种各样的可视化图形,像折线图、柱状图、散点图等。对于数据可视化、数据分析和科学研究而言,它是非常重要的工具。接下来我会以初学者的视角,为你详细介绍 Matplotlib…...
daz dForce to UE 的原理分析
dForce是物理模拟,不是关键帧动画: dForce是一个物理引擎。当你运行模拟时,Daz Studio会根据你设置的物理属性(如裙子的重量、布料的硬度、摩擦力)、环境因素(如重力、风力)以及与角色的碰撞&am…...
速卖通商品详情API接口:功能、应用与开发指南
前言 在全球跨境电商蓬勃发展的背景下,速卖通(AliExpress)作为阿里巴巴旗下的国际电商平台,凭借丰富的商品种类和庞大的用户群体,成为众多商家和开发者拓展海外市场的首选平台。为了满足商家和开发者对商品数据的深度…...
4月14日星期一今日早报简报微语报早读
4月14日星期一,农历三月十七,早报#微语早读。 1、全国田径大奖赛接力摘金,苏炳添的传奇将延续至全运会; 2、中国红基会:2024年全年总收支12.85亿元; 3、我国2025年电影总票房已突破250亿 位居全球第一&a…...
快速排序(非递归版本)
引言 在排序算法的世界里,快速排序以其高效的性能脱颖而出。它采用分治法的思想,通过选择基准元素将数组分为两部分,递归地对左右两部分进行排序。然而,递归实现的快速排序在处理大规模数据时可能会导致栈溢出的问题。为了解决这…...
Ubuntu20.04 设置开机自启
参考: Ubuntu20.04 设置开机自启_ubuntu进bos系统-CSDN博客...
添加登录和注册功能
先写前端再写后端 前提:ideavue3mybatisspringBoot3前后端分离实现对一张表的增删改查(完整代码版)-CSDN博客 项目地址 1.添加一个Login.vue视图 <template><div class"login_container"><div class"login…...
弱口令爆破
1.简单介绍 弱口令是指一些简单易猜的密码,可通过社工方式和一些爆破工具进行破解,以下介绍一款爆破工具的用法。burpsuite简称BP,一款可以利用字典破解账户密码的工具。 2.部署网站 可以使用PHPstudy的Apache服务,也可以使用I…...
springboot调用python文件,在ubuntu上部署,踩坑之旅(已部署成功)
项目介绍 springboot 调用python文件,python调用另一个数据文件,然后计算出结果,看似简单,实际上有很多坑,因为涉及到python的三方库,有时候下载不下来,有时候版本不匹配,折腾了好久…...
Android studio消息同步机制:消息本地存储,服务器交互减压
文章目录 后端(Flask)代码前端(Android Studio Java)代码 消息同步机制: 手机端可以将消息存储在本地数据库中,减少与服务器的交互压力。同时,通过序列号机制,手机端可以与服务器同步消息&#…...
前端常用组件库全览与推荐
📌 一、组件库生态全景图 🚀 二、React 生态组件库推荐 名称简介官网Ant Design阿里出品,企业级 UI 系统,设计规范完整,适合后台系统https://ant.designMaterial UIGoogle Material Design 实现,样式响应式…...
视觉算法+雾炮联动:开创智能降尘新时代
在许多工业环境中,尤其是那些涉及大量物料搬运和处理的地方,如工厂或仓库,扬尘问题是一个普遍存在的挑战。这不仅影响了工作人员的工作条件,还可能构成健康和安全隐患。为了改善这一状况,不少业主采用了物理方法来减少…...
【Pandas】pandas DataFrame items
Pandas2.2 DataFrame Indexing, iteration 方法描述DataFrame.head([n])用于返回 DataFrame 的前几行DataFrame.at快速访问和修改 DataFrame 中单个值的方法DataFrame.iat快速访问和修改 DataFrame 中单个值的方法DataFrame.loc用于基于标签(行标签和列标签&#…...
易境通WMS系统代理仓解决方案:让代理仓管理无后顾之忧!
易境通WMS系统代理仓解决方案:让代理仓管理无后顾之忧! 对于海外仓企业而言,除了自有仓库外,为了业务发展还会同时代理其他仓库,于是经常会面临主仓代理仓数据同步问题及费用问题。此外,由于个仓库分布较广…...
【智驾中的大模型 -2】VLM 在自动驾驶中的应用
1. 前言 随着端到端 AI 和多模态学习的迅猛发展,VLM(视觉-语言模型)在自动驾驶领域中的应用正逐渐成为一个备受瞩目的重要研究方向。VLM 凭借其强大的融合能力,将视觉(如高清晰度的摄像头图像、精准的雷达数据&#x…...
L1-104 九宫格
L1-104 九宫格 - 团体程序设计天梯赛-练习集 九宫格是一款数字游戏,传说起源于河图洛书,现代数学中称之为三阶幻方。游戏规则是:将一个 99 的正方形区域划分为 9 个 33 的正方形宫位,要求 1 到 9 这九个数字中的每个数字在每一行…...
图像预处理(OpenCV)-part2
4 边缘填充 为什么要填充边缘呢?我们以下图为例。 原图旋转后的图 可以看到,左图在逆时针旋转45度之后原图的四个顶点在右图中已经看不到了,同时,右图的四个顶点区域其实是什么都没有的,因此我们需要对空出来的区域进…...
SpringAI-ollama
SpringAi主要依赖 System Prompt :设置提示词 用来预设角色 ConversationMemory: 对话集 RAG: 检索增强生成 将业务数据存储在向量数据库中(做相似性检索)通过RAG进行链接 Function Calling 用来调用自己的api <dependencyManagement>&…...
如何在Windows 10系统中查看已连接WiFi密码-亲测可用-优雅草卓伊凡
如何在Windows 10系统中查看已连接WiFi密码-亲测可用-优雅草卓伊凡 通过系统设置查看 点击屏幕左下角的“开始”按钮,打开“设置”应用。在“设置”应用中,点击“网络和 Internet”。在“网络和 Internet”页面中,点击“WLAN”,…...
蓝耘赋能通义万相 2.1:用 C++ 构建高效 AI 视频生成生态
开篇:AI 视频生成新时代的号角 通义万相 2.1:AI 视频生成的领军者 核心技术揭秘 功能特点展示 与其他模型的全面对比 C:高效编程的基石 C 的发展历程与特性 C 在 AI 领域的广泛应用 通义万相 2.1 与 C 的完美融合 融合的意义与价值 …...
tmpfs的监控筛选/dev/shm下的shmem创建
一、背景 在一个比较注重性能的系统上,共享内存的使用肯定非常普遍。为了能更好的了解系统里共享内存的使用,比如创建、删除等操作,我们是可以对其进行监控的。 这篇博客以共享内存的创建监控为例来介绍如何监控共享内存。 这里有一个概念…...
如果你在使用 Ubuntu/Debian:使用 apt 安装 OpenSSH
情况 1:如果你在使用 Ubuntu/Debian: 使用 apt 安装 OpenSSH: bash 复制 sudo apt update sudo apt install openssh-server 完成后检查 SSH 服务状态: bash 复制 sudo systemctl status ssh 情况 2:如果你在使用 Ce…...
设计模式每日硬核训练 Day 11:适配器模式(Adapter Pattern)完整讲解与实战应用
🔄 回顾 Day 10:模板方法模式小结 在 Day 10 中,我们学习了模板方法模式: 它用于定义流程的“骨架”,将固定步骤放在父类,具体实现交给子类完成。实现了“统一流程 差异化行为”的复用范式。 而今天&am…...
xAI Elasticsearch 集群架构解析:索引数据规模与分片优化实践
Elasticsearch(ES)作为分布式搜索和分析引擎,是 xAI 构建高性能数据处理系统的基石。xAI 的业务场景,如实时日志分析、模型训练数据检索和用户行为分析,要求 Elasticsearch 集群兼顾高吞吐写入、低延迟查询和动态扩展能…...
[c语言日寄]时间复杂度
【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…...
快速幂(蓝桥杯)
1. 递归实现 递归方法通过将问题分解为更小的子问题来实现。具体步骤如下: 如果指数 b 为 0,返回 1。 如果 b 是偶数,则递归计算 (a^2)b/2。 如果 b 是奇数,则递归计算 a⋅(a^2)(b−1)/2。 伪代码: function fas…...
[Python基础速成]2-模块与包与OOP
上篇➡️[Python基础速成]1-Python规范与核心语法 目录 Python模块创建模块与导入属性__name__dir()函数标准模块 Python包类类的专有方法 对象继承多态 Python模块 Python 中的模块(Module)是一个包含 Python 定义和语句的文件,文件名就是模…...
Spring AOP 学习笔记 之 常用注解
0 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId><version>3.4.2</version></dependency> 要在springboot中启用AOP,需要引入spring-boot-…...
JVM——运行时数据区
目录 Class装载到JVM的过程 装载(load)——查找和导入class文件 正文------------------- Run-time Data Areas 运行时数据区 Method Area 方法区 Heap 堆 Java Virtual Machine Stacks(Java虚拟机栈) The PC Register 程…...
Conda 入门指令教程
Conda 入门指令教程 Conda 是一个强大的包和环境管理工具,广泛应用于数据科学和机器学习项目中。本文将介绍 Conda 的常用指令,帮助你快速上手。 1. Conda 基础操作 查看 Conda 版本 conda --version显示当前安装的 Conda 版本。 更新 Conda conda…...
基于STM32、HAL库的MAX14830总线转UART驱动程序设计
一、简介: MAX14830是一款四通道UART扩展器,通过SPI或I2C接口与微控制器通信。主要特性包括: 4个独立的全双工UART通道 可编程波特率(最高达12Mbps) 每个通道有128字节的发送和接收FIFO 支持硬件和软件流控制 可配置的GPIO引脚 工作电压:1.7V至5.5V 低功耗模式 二、硬件…...
x-cmd install | jellex - 用 Python 语法在终端里玩转 JSON 数据!
目录 核心功能与特点安装优势亮点适用场景 还在为命令行下处理 JSON 数据烦恼吗?jellex 来了!它是一款基于终端的交互式 JSON 和 JSON Lines 数据处理工具,让你用熟悉的 Python 语法,轻松过滤、转换和探索 JSON 数据。 核心功能与…...
2025天梯赛 L2专项训练
L2-049 鱼与熊掌 - 团体程序设计天梯赛-练习集 思路就是模拟,正常写就完事 #include<bits/stdc.h> using namespace std; int main() {int a, b;cin >> a >> b;vector<vector<int>>arr(a, vector<int>(0));for (int i 0; i &…...
214、【数组】下一个排列(Python)
题目描述 原题链接:31. 下一个排列 思路 从后往前,找到第一个小于右侧集合的数,从右侧集合中找到一个比该数大的最小的数替换上去。 然后,将右侧集合从小到排列,就为当前排列中,下一个排列的数。 代码实…...
Why does Java‘s hashCode() in String use 31 as a multiplier?
HashCode 为什么使用 31 作为乘数? 1. 固定乘积 31 在这用到了2. 来自 stackoverflow 的回答3. Hash 值碰撞概率统计3.1 读取单词字典表3.2 Hash 计算函数3.3 Hash 碰撞概率计算封装碰撞统计信息的类3.4 针对一组乘数,分别计算碰撞率3.5 碰撞结果可视化3…...
如何将一个8s的接口优化到500ms以下
最近换了个工作,刚入职就接了个活--优化公司自营app的接口性能,提升用户体验。 刚开始还以为是1s优化到500ms这种,或者500ms优化到200ms的接口,感觉还挺有挑战的。下好app体验了一下。好家伙,那个慢已经超过了我的忍耐…...
如何保证本地缓存和redis的一致性
1. Cache Aside Pattern(旁路缓存模式) 核心思想:应用代码直接管理缓存与数据的同步,分为读写两个流程: 读取数据: 先查本地缓存(如 Guava Cache)。若本地未命中&…...
30天学Java第十天——反射机制
反射机制 反射机制是 Java 语言中的一个重要特性,它允许程序在运行时动态地获取类的信息(如类的属性、方法和构造器等),并且可以操作这些信息。 反射机制在某些情况下非常有用,例如开发框架、库,或者需要进…...
Nodejs Express框架
参考:Node.js Express 框架 | 菜鸟教程 第一个 Express 框架实例 接下来我们使用 Express 框架来输出 "Hello World"。 以下实例中我们引入了 express 模块,并在客户端发起请求后,响应 "Hello World" 字符串。 创建 e…...
视频设备轨迹回放平台EasyCVR打造货运汽车安全互联网视频监控与管理方案
一、背景介绍 随着互联网发展,货运中介平台大量涌现,行业纠纷也随之增多。尽管当前平台APP具备录音和定位功能,但货物交易流程的全方位监控仍无法实现。主流跟踪定位服务大部分聚焦货物轨迹与车辆定位,尚未实现货物全程可视化监控…...
玩转Docker | 使用Docker部署Docmost文档管理系统
玩转Docker | 使用Docker部署Docmost文档管理系统 前言一、Docmost介绍Docmost 简介Docmost 特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署Docmost服务下载镜像编辑部署文件创建容器检查容器状态检查服务端口安全设置四、访问Docmost服务访问Docmos…...
docker方式项目部署(安装容器组件+配置文件导入Nacos+dockerCompose文件创建管理多个容器+私有镜像仓库Harbor)
基于docker的部署 服务器主机ip 192.168.6.131 安装组件 安装redis docker pull redis:7.0.10#在宿主机上/var/lib/docker/volumes/redis-config/_data/目录下创建一个redis配置文件 vim redis.conf#内容如下 appendonly yes #开启持久化 port 6379 #requirepass 1234 #密码…...
基于OpenCV与PyTorch的智能相册分类器全栈实现教程
引言:为什么需要智能相册分类器? 在数字影像爆炸的时代,每个人的相册都存储着数千张未整理的照片。手动分类不仅耗时,还容易遗漏重要瞬间。本文将手把手教你构建一个基于深度学习的智能相册分类系统,实现:…...
C++中string库常用函数超详细解析与深度实践
目录 一、引言 二、基础准备:头文件与命名空间 三、string对象的创建与初始化(基础) 3.1 直接初始化 3.2 动态初始化(空字符串) 3.3 基于字符数组初始化 3.4 重复字符初始化 四、核心函数详解 4.1 字符串长度相关 4.1.1 …...
数据结构(3)
实验步骤: 任务:要求使用自定义函数来实现 输入一段文本,统计每个字符出现的次数,按照字符出现次数从多到少,依次输出,格式如下: 字符1-个数 字符2-个数 ...... 解题思路: 构建结构体…...