如何在Mule 4中选取对象数组内重复id对应的最后一个实例
实现方案
核心思路
遍历数组时用键值对结构(Map/对象)以id为Key存储对应对象,后续遇到相同id时直接覆盖已存储的对象,遍历完成后所有Key对应的Value就是该id最后一次出现的对象,最终提取Value集合作为结果即可,时间复杂度为O(n)。
常用语言实现示例
JavaScript 实现
const input = { "message": [ { "name": "Abc", "address":"Mumbai", "phone":"91-1234567891", "id":123 }, { "name": "Pqr", "address":"Pune", "phone":"91-1234985438", "id":456 }, { "name": "Abc", "address":"Delhi", "phone":"91-1234567891", "id":123 } ] } // 用Map结构存储,严格保留元素最后出现的先后顺序 const idMap = new Map() input.message.forEach(item => idMap.set(item.id, item)) // 生成最终结果 const output = { message: Array.from(idMap.values()) }
如果不需要严格保留遍历顺序,也可以用普通对象代替Map:
const idMap = {} input.message.forEach(item => { idMap[item.id] = item }) const output = { message: Object.values(idMap) }
Kotlin 实现
你用到的distinctBy默认保留第一个出现的元素,要保留最后一次出现的元素有两种简洁实现:
- 反转数组后去重,再反转回原顺序
val result = input.message .reversed() .distinctBy { it.id } .reversed()
- 利用
associateBy的覆盖特性实现,性能更高
val result = input.message .associateBy { it.id } .values .toList()
内容的提问来源于stack exchange,提问作者Uday
相关产品推荐
相关产品推荐

