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

Android Kotlin:如何根据ObjectB的ID过滤ObjectA列表?

基于ID交集过滤ObjectA列表的实现方案

高效实现(推荐)

先把ObjectB列表里的有效ID提取成Set(Set的查找效率远高于列表),再用这个Set过滤ObjectA:

// 提取ObjectB中所有非空且非空字符串的ID,存入Set
val bValidIds = objectBList
    .mapNotNull { it.id.takeIf { id -> id.isNotEmpty() } }
    .toSet()

// 过滤ObjectA列表,保留ID在bValidIds中的元素
val filteredObjectA = objectAList.filter { objA ->
    objA.id != null && bValidIds.contains(objA.id)
}

简洁链式写法(适合小列表)

如果你的列表元素数量不多,也可以用一行链式调用完成,不过性能略逊于上面的方案:

val filteredObjectA = objectAList.filter { objA ->
    objA.id?.let { aId ->
        objectBList.any { objB -> objB.id == aId && objB.id.isNotEmpty() }
    } ?: false
}

关键细节说明

  • 处理ObjectA的可空ID:必须先判断objA.id != null,避免空指针异常
  • 排除ObjectB的空ID:ObjectB的id默认是空字符串,所以要过滤掉这类无效ID,避免误匹配
  • 性能差异:用Set存储ID的方案,查找时间复杂度是O(1),而直接用any遍历列表是O(n),数据量大时前者优势明显

内容的提问来源于stack exchange,提问作者Bomatch Eric

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:10:32