如何优化双条件列表过滤算法:Kotlin充电站数据去重择优排序
代码优化方案
你的原始实现逻辑是正确的,我们可以利用Kotlin标准库的集合操作函数进一步简化代码,提升可读性,同时补全你原始代码中缺失的「保留完整Station对象」逻辑:
核心优化点
- 去掉手动维护可变Map的遍历逻辑,用内置
groupBy+minBy完成同类型下最优站点筛选 - 无需提前判断列表非空,空输入会自动返回空结果
- 直接保留完整Station对象,无需后续二次匹配原列表查找stationId
- 排序逻辑可灵活调整
优化后完整代码
val result = stations // 按站点类型分组 .groupBy { it.type } // 每组取status最优的站点:枚举ordinal越小优先级越高,和你定义的优先级顺序一致 .mapValues { (_, sameTypeStations) -> sameTypeStations.minBy { it.status.ordinal } } // 提取所有分组的最优站点 .values // 排序:AVAILABLE状态优先排在最前,其余状态默认按原有顺序排列 .sortedByDescending { it.status == ChargingEntityStatus.AVAILABLE }
如果你需要对非AVAILABLE的站点也按status优先级排序,可以调整排序逻辑:
.sortedWith( compareByDescending<Station> { it.status == ChargingEntityStatus.AVAILABLE } .thenBy { it.status.ordinal } )
注意事项
你当前定义的ChargingEntityStatus枚举顺序里OCCUPIED排在最后,优先级最低,和你注释标注的「UNAVAILABLE是最差选项」有出入,如果需要调整优先级直接修改枚举的定义顺序即可,代码无需改动。
内容的提问来源于stack exchange,提问作者memeprincess
相关产品推荐
相关产品推荐

