android - 如何在单独的线程中监听 HashMap 值的变化使其可流动?

标签 android rx-java rx-java2

我有 Map of items 我想听变化并做一些 Action 我想在单独的线程中完成,但 map 已更改但我可以听到它的更改

val removedItemList: HashMap<Int,Item> = HashMap()

Flowable.fromArray(removedShoppingList.values).subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe({ items ->
      Log.i("items_removed", " " + items + items.size);
    })

最佳答案

请尝试以下代码:

// 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))

关于android - 如何在单独的线程中监听 HashMap 值的变化使其可流动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46580705/

相关文章:

android-studio - 相同的值作为 nextKey 在从 Paging Library 3 Android 中的 PagingSource 加载的两个连续页面中传递

android - 以编程方式获取Android手机的电话号码

Android:如何设置保存文件等的路径,就像在我们写的 windows 中,c:/someting/...我将在 android 中做什么

android - 使用 RxJava 限制吞吐量

java - Rx java 运算符;将数据流封装到自定义 Operator 中

android - RxJava RetryWhen,这个处理器只允许一个订阅者

android - 无法连接到 Android 模拟器 Windows 操作系统上的开发服务器?

android - 如何从 ListView 适配器类完成 Activity ?

android - 订阅多个 View 到A View onclick和可见性变化RxAndroid

android - RXJava 2 Flowable`s mergeWith 不合并