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

如何以Kotlin风格优雅实现列表合并去重并添加过滤日志?

优雅实现Kotlin书籍列表合并去重并记录过滤ISBN

需求是合并两个Book列表,移除次级列表中与主列表重复的元素(按ISBN判断),同时在有书籍被过滤时记录所有受影响的ISBN。下面是更简洁高效的Kotlin实现:

private fun combineAndDedupe(fromMainSupplier: List<Book>, fromSecondarySupplier: List<Book>): List<Book> {
    val mainIsbns = fromMainSupplier.map { it.isbn }.toSet()
    val (secondaryToKeep, secondaryToRemove) = fromSecondarySupplier.partition { it.isbn !in mainIsbns }
    
    secondaryToRemove.takeIf { it.isNotEmpty() }?.let { removedBooks ->
        logger.info("移除主列表已存在的次级供应商书籍:${removedBooks.joinToString(",") { it.isbn }}")
    }
    
    return fromMainSupplier + secondaryToKeep
}

优化点说明:

  • 提升查找效率:将主列表的ISBN转为Set,in操作的时间复杂度从O(n)降到O(1),主列表规模较大时优势明显。
  • 减少遍历次数:用partition一次遍历次级列表,同时拆分出需要保留和移除的书籍,避免原实现中多次遍历次级列表的冗余操作。
  • 简化条件判断:通过takeIf + let的组合,仅当存在被移除的书籍时才执行日志逻辑,替代冗长的if块,更符合Kotlin简洁风格。
  • 减少中间变量:直接从被移除的书籍集合中提取ISBN,无需额外生成次级列表的ISBN集合和待移除ISBN集合,代码更紧凑。

内容的提问来源于stack exchange,提问作者Martin J.H.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:50:24