Collections 如何在Kotlin集合中生成UpdateOrInsert

Collections 如何在Kotlin集合中生成UpdateOrInsert,collections,kotlin,Collections,Kotlin,我有一个项目列表,其中一个项目副本由用户更改,我如何通过Id和更新在我的集合中找到它,或者如果找不到,我想添加该项目?我最好的猜测是,但它需要丑陋的索引of(v) 用于查找具有给定ID的第一个元素的索引。如果为-1,则将该项添加到列表中,否则,更改找到的索引处的值。用于查找具有给定ID的第一个元素的索引。如果为-1,则将该项添加到列表中,否则,更改找到的索引处的值。您不需要最后一行notes.value=list。这是android LiveData魔术,所以在引擎盖下它会发送eventsAh,

我有一个项目列表,其中一个项目副本由用户更改,我如何通过Id和更新在我的集合中找到它,或者如果找不到,我想添加该项目?我最好的猜测是,但它需要丑陋的索引of(v)


用于查找具有给定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
}