Kotlin查找嵌套列表匹配元素时List与Sequence的效率对比咨询
Kotlin嵌套List筛选的性能对比和优化方案
现有代码的性能基础
你当前的实现本身已经用到了短路求值逻辑,没有多余遍历开销:
- 外层
find只要匹配到第一个符合条件的外层元素就会立即终止遍历,不会遍历剩余外层元素 - 内层
any只要匹配到第一个符合条件的内层元素就会立即终止内层遍历,不会遍历剩余内层元素
List和Sequence的选型结论
- 中小数据量场景(外层元素<1000、单内层元素<100):直接用现有List实现即可。这种场景下Sequence创建迭代器、懒加载调度的开销反而会高于普通List遍历,内存消耗也没有明显差异。
- 超大数据量场景(外层元素过万、单内层元素过千):可以尝试改用Sequence,但性能提升幅度有限。因为你当前的操作只有
find一个终端操作,没有filter/map这类会生成中间集合的链式中间操作,Sequence懒加载减少中间集合的优势发挥不出来,和普通List的性能差异基本在10%以内。
代码可读性优化建议
现有代码的空判断可以简化,逻辑等价的前提下代码更简洁:
currentItem = outerList?.firstOrNull { outer -> outer.items.orEmpty().any { item -> item.isVisible == visibility && item.progress == currentProgress } } // 后续逻辑直接根据currentItem是否为null分支即可,无需嵌套let+run
orEmpty()会把null的内层集合转为空集合,空集合执行any默认返回false,不需要额外判断isNullOrEmpty。
内容的提问来源于stack exchange,提问作者testivanivan
相关产品推荐
相关产品推荐

