を変更してみてください。次のコードは:
// When HashMap changed, this class emitted.
class MapEvent(val event: EventType, val item: Item?){
enum class EventType {
ADD,
REMOVE
}
}
~~~
// PublishSubject emits changed event.
val subject = PublishSubject.create<MapEvent>()
// Subscribe changed event.
// When emits changed event by PublishSubject, print log.
val obervable = subject.hide().share()
obervable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {it -> Log.i("HashMap Changed", "Event: ${it.event}, Item: ${it.item}")}
val itemList: HashMap<Int, Item> = HashMap()
val addedItem = Item()
// If you add or remove HashMap item, then execute onNext method in order to emit changed event.
itemList.put(1, addedItem)
subject.onNext(MapEvent(MapEvent.EventType.ADD, addedItem))
val removedItem = itemList.remove(1)
subject.onNext(MapEvent(MapEvent.EventType.REMOVE, removedItem))
それはあなたが通知されるようにしたいです何をどのように依存します。カスタムクラスにremoveListItemをラップし、様々な変更イベントに 'PublishSubject'を使用してMapメソッド呼び出しをインターセプトします。ただし、HashMapはスレッドセーフではないので、マップ全体を別のスレッドにシグナリングするか、他のスレッドで読み込むだけで危険です。 – akarnokd
さて、ConcurentHashMapに変更するにはどう思いますか? 「どうやって通知を受けたいですか? –
アイテムは数十種類の方法で追加、削除、置き換えられますが、どれを検出したいのですか? – akarnokd