Collections 如何在Kotlin集合中生成UpdateOrInsert
我有一个项目列表,其中一个项目副本由用户更改,我如何通过Id和更新在我的集合中找到它,或者如果找不到,我想添加该项目?我最好的猜测是,但它需要丑陋的索引of(v)Collections 如何在Kotlin集合中生成UpdateOrInsert,collections,kotlin,Collections,Kotlin,我有一个项目列表,其中一个项目副本由用户更改,我如何通过Id和更新在我的集合中找到它,或者如果找不到,我想添加该项目?我最好的猜测是,但它需要丑陋的索引of(v) 用于查找具有给定ID的第一个元素的索引。如果为-1,则将该项添加到列表中,否则,更改找到的索引处的值。用于查找具有给定ID的第一个元素的索引。如果为-1,则将该项添加到列表中,否则,更改找到的索引处的值。您不需要最后一行notes.value=list。这是android LiveData魔术,所以在引擎盖下它会发送eventsAh,
用于查找具有给定ID的第一个元素的索引。如果为-1,则将该项添加到列表中,否则,更改找到的索引处的值。用于查找具有给定ID的第一个元素的索引。如果为-1,则将该项添加到列表中,否则,更改找到的索引处的值。您不需要最后一行
notes.value=list
。这是android LiveData魔术,所以在引擎盖下它会发送eventsAh,好吗。我还没有对LiveData做任何事情,但我明白你的意思。:)你不需要最后一行notes.value=list
。这是android LiveData魔术,所以在引擎盖下它会发送eventsAh,好的。我还没有对LiveData做任何事情,但我明白你的意思。:)不知道是否可以满足一行要求,但至少使用indexOfFirst
可以在列表上为您节省多次迭代:fun updateOrInsert(note:UserNote){val index=notes.value!!.indexOfFirst{it.Id==note.Id};if(index=-1){notes.value.add(note)}else{notes.value[index]=note}
不知道是否可以满足一行要求,但至少使用indexOfFirst
可以在列表上节省多次迭代:fun updateOrInsert(note:UserNote){val index=notes.value!!.indexOfFirst{it.Id==note.Id};if(index==1){notes.value.add(note)}else{notes.value[index]=note}
fun updateOrInsert(note : UserNote) {
val list = notes.value!!
val v = list.firstOrNull{(Id) -> Id ==note.Id}
if (v==null) {
list.add(note)
} else {
val i = list.indexOf(v)
list[i] = note
}
notes.value = list
}