2017-09-05 16 views
0

アイテムのリストがあり、アイテムのコピーの1つがユーザーによって変更されています。IDと更新によってコレクション内で見つけたり、見つからない場合はどうすればいいですか?アイテムを追加するには?私の最高の推測ではあるが、それは与えられたIDを持つ最初の要素のインデックスを見つけるために、醜いのindexOf(V)KotlinコレクションでUpdateOrInsertを作成する方法

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 
} 
+1

最後の行 'notes.value = list'は必要ありません。 – Boris

+0

それはアンドロイドのLiveDataの魔法ですので、フードの下でイベントを送信します –

+0

ああ、大丈夫です。まだLiveDataで何もしていないが、あなたが言っていることを得る。 :) – Boris

答えて

2

使用indexOfFirstが必要です。 -1の場合はリストに項目を追加し、そうでない場合は検索されたインデックスの値を変更します。

+0

一行の要件を満たすことができるかどうか分からないが、少なくとも '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}} ' – Boris

関連する問題