[英]How to create functions which will listen to changes in hashmap?
private HashMap<Integer, Item> items = new Hashmap<>();
private Flowable<Item> observeItemById(int id) {
return Flowable.create(emitter -> {
???
},BackpressureStrategy.LATEST);
}
private Flowable<List<Item>> observeItems() {
return Flowable.create(emitter -> {
???
},BackpressureStrategy.LATEST);
}
//For now I update my hashmap just by putting new items or updating their fields in Item object
每次调用这些函数时,我都想创建这些函数的“新实例”/“新侦听器”。 当我调用 observeItems() 时,我想在该列表中有任何更改时发出列表。 但是当我调用observeItemById(int id)时,它应该在Item对象发生变化时发出。
我应该如何创建这些功能?
我应该如何创建我的哈希图并稍后更新它以发出这些更改?
例如:
class Item
class ObservableHashMap(private val map: MutableMap<Int, Item> = mutableMapOf()) : MutableMap<Int, Item> by map {
private val changesSubject = PublishSubject.create<Pair<Int, Item>>()
override fun put(key: Int, value: Item): Item? {
return map.put(key, value).also {
changesSubject.onNext(Pair(key, value))
}
}
override fun remove(key: Int): Item? {
return map.remove(key)?.also { value ->
changesSubject.onNext(Pair(key, value))
}
}
fun observeItemById(id: Int): Flowable<Item> {
return changesSubject.toFlowable(BackpressureStrategy.LATEST)
.filter { (key) -> key == id }.map { (_, value) -> value }
}
fun observeItems(): Flowable<List<Item>> {
return changesSubject.toFlowable(BackpressureStrategy.LATEST)
.map { values.toList() }
}
}
您可以创建一个返回 Flowable 的包装器。 然后,您应该覆盖 put 函数并使用该 Flowable 发出更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.