std扩展是否插入或更新使用比较器的kotlin可变列表?
我有一个复杂对象的列表,我想将此列表与新列表合并。但若在新的元素中有相同的对象(基于传递的比较器),那个么元素应该被替换,否则按顺序添加到列表的末尾 我写了一个扩展函数来完成这项工作,但我正在寻找更有效(更优雅)的方法,比如一些现有扩展的组合std扩展是否插入或更新使用比较器的kotlin可变列表?,kotlin,Kotlin,我有一个复杂对象的列表,我想将此列表与新列表合并。但若在新的元素中有相同的对象(基于传递的比较器),那个么元素应该被替换,否则按顺序添加到列表的末尾 我写了一个扩展函数来完成这项工作,但我正在寻找更有效(更优雅)的方法,比如一些现有扩展的组合 fun <T> MutableList<T>.insertOrUpdate(items: List<T>, comparator: Comparator<T>): List<T> { va
fun <T> MutableList<T>.insertOrUpdate(items: List<T>, comparator: Comparator<T>): List<T> {
val out = mutableListOf<T>()
val toInsert = items.toMutableList()
forEach { oldItem ->
var wasUpdated = false
items.forEach { newItem ->
if (comparator.compare(oldItem, newItem) == 0) {
out.add(newItem)
toInsert.remove(newItem)
wasUpdated = true
}
}
if(!wasUpdated){
out.add(oldItem)
}
}
out.addAll(toInsert)
return out
}
fun MutableList.insertOrUpdate(项目:列表,比较器:比较器):列表{
val out=mutableListOf()
val toInsert=items.toMutableList()
forEach{oldItem->
var wasUpdated=false
items.forEach{newItem->
if(comparator.compare(oldItem,newItem)==0){
out.add(newItem)
toInsert.remove(新建项)
wasUpdated=true
}
}
如果(!已更新){
out.add(旧项)
}
}
out.addAll(toInsert)
返回
}
使用LinkedHashSet
(按插入顺序迭代其元素)而不是列表
,只需addAll()
?@gidds和如何传递比较器?