You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不同对象类型ArrayList对比及按remedy_id过滤列表的最优实现方法

不同对象类型ArrayList的最优对比过滤实现方案

最优实现思路

核心逻辑是用空间换时间降低时间复杂度,避免低效的双重遍历:

  1. 先从remedy列表中提取所有有效remedy_id存入HashSet,利用Set的O(1)时间复杂度查询特性
  2. 用得到的有效id集合直接过滤adherence列表,总时间复杂度为O(m + n)(m为remedy列表长度,n为adherence列表长度)

具体代码实现

首先明确两个输入列表的类型:

  • remedyList: ArrayList<ObjectA.Objecta> 存储Remedy数据的列表
  • adherencesList: ArrayList<ObjectB.Objectb> 存储Adherence数据的待过滤列表

方案1:生成新的过滤后列表(不修改原列表,推荐)

// 第一步:提取所有有效remedy_id存入Set
val validRemedyIds = remedyList.mapTo(mutableSetOf()) { it.remedy_id }
// 第二步:过滤得到符合要求的adherence列表
val filteredAdherences = adherencesList.filter { it.remedy_id in validRemedyIds }

方案2:直接修改原adherencesList

val validRemedyIds = remedyList.mapTo(mutableSetOf()) { it.remedy_id }
// 直接移除不符合要求的条目,Java 8+/Android API 24+ 支持
adherencesList.removeIf { it.remedy_id !in validRemedyIds }

// 低版本兼容写法
val retainedList = adherencesList.filterTo(mutableListOf()) { it.remedy_id in validRemedyIds }
adherencesList.clear()
adherencesList.addAll(retainedList)

方案优势说明

  • 性能远高于双重遍历/每次调用remedyList.contains()的写法,后者时间复杂度为O(m*n),列表元素过千时性能差异会非常明显
  • 自动处理remedy列表中remedy_id重复的场景,Set自动去重不影响判断逻辑
  • 代码简洁可读性高,符合Kotlin的函数式编程规范

内容的提问来源于stack exchange,提问作者Prophet Tech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:06:03