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

如何从List<Work>列表中筛选匹配规则元素并取同组最高版本?

Kotlin列表分组筛选最高版本实现

需求说明

持有存储Work模型元素的列表,Work模型包含字段:id、title、number、version number。需要实现两个筛选规则:

  • 过滤掉version number为空的元素
  • 对title + number组合相同的元素分组,每组仅保留version number值最高的元素

示例

原列表元素(按title、number、version顺序排列):

Running (120:1)
Running (120:2)
Running (120:3)
Climbing (55:1)
Climbing (55:2)
Climbing (55:3)
Climbing (55:4)

期望筛选后结果:

Running (120:3)
Climbing (55:4)

现有问题

当前编写的代码逻辑不完整,尝试用正则匹配的思路完全没必要,Kotlin标准库提供的分组、聚合函数可以直接实现需求,不需要写正则匹配。
原有残缺代码:

private fun List<Work>.filterByVersion(): List<Work> {

                work.version_number != null
        }.filter { work -> ("${work.title} ${work.number}:${work.version_number}").contains("no idea of regex here")
     }
    }

完整实现代码

private fun List<Work>.filterByVersion(): List<Work> {
    // 先过滤version_number为空的条目
    return filter { it.version_number != null }
        // 按title+number的组合分组,用二元组做key比拼接字符串更可靠,避免字段内容拼接冲突
        .groupBy { it.title to it.number }
        // 每组取version_number最大的条目
        .mapValues { (_, sameGroupItems) ->
            sameGroupItems.maxBy { it.version_number!! }
        }
        // 取出筛选后的结果转为列表
        .values.toList()
}

注意点

  • 前面已经过滤了version_number为空的条目,所以取最大值时用非空断言!!不会触发空指针异常
  • 该实现返回的结果顺序和每个分组首次在原列表出现的顺序一致,和示例期望的输出顺序匹配;如果需要自定义排序,可以在返回结果前追加sortedBy等排序逻辑
  • 不需要用正则做字符串匹配,分组操作直接操作模型字段,性能和可维护性都更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:27:36