Java 如何创建监听hashmap中更改的函数? private HashMap items=new HashMap(); 私有可流动observeItemById(int id){ 返回可流动。创建(发射器->{ ??? },背压等级。最新版本); } 私有可流动观测系统(){ 返回可流动。创建(发射器->{ ??? },背压等级。最新版本); } //现在,我只是通过在Item对象中放置新项或更新它们的字段来更新hashmap

Java 如何创建监听hashmap中更改的函数? private HashMap items=new HashMap(); 私有可流动observeItemById(int id){ 返回可流动。创建(发射器->{ ??? },背压等级。最新版本); } 私有可流动观测系统(){ 返回可流动。创建(发射器->{ ??? },背压等级。最新版本); } //现在,我只是通过在Item对象中放置新项或更新它们的字段来更新hashmap,java,android,rx-java2,rx-android,Java,Android,Rx Java2,Rx Android,每次调用这些函数时,我都希望创建这些函数的“新实例”/“新侦听器”。 调用observeItems()时,我希望在列表中有任何更改时发出列表。 但是,当我调用observeItemById(int-id)时,应该在该项对象发生更改时发出它 我应该如何创建这些函数 我应该如何创建hashmap并在以后更新它以发出这些更改?您可以创建一个返回可流动数据的包装器。 然后,您应该重写put函数,并使用该可流动项发出更改。例如: private HashMap<Integer, Item> i

每次调用这些函数时,我都希望创建这些函数的“新实例”/“新侦听器”。 调用observeItems()时,我希望在列表中有任何更改时发出列表。 但是,当我调用observeItemById(int-id)时,应该在该项对象发生更改时发出它

我应该如何创建这些函数


我应该如何创建hashmap并在以后更新它以发出这些更改?

您可以创建一个返回可流动数据的包装器。 然后,您应该重写put函数,并使用该可流动项发出更改。

例如:

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
类项目
类ObservableHashMap(私有值映射:MutableMap=mutableMapOf()):按映射的MutableMap{
private val changesobject=PublishSubject.create()
覆盖有趣的放置(键:Int,值:Item):Item{
返回map.put(键,值)。也{
ChangesObject.onNext(成对(键、值))
}
}
覆盖乐趣移除(键:Int):项目{
返回映射。删除(键)?。同时{value->
ChangesObject.onNext(成对(键、值))
}
}
有趣的observeItemById(id:Int):可流动{
返回更改对象为可流动(背压等级最新)
.filter{(key)->key==id}.map{({,value)->value}
}
趣味observeItems():可流动{
返回更改对象为可流动(背压等级最新)
.map{values.toList()}
}
}

observeItemById(int-id)方法中的
id
是什么?地图输入键?@AkakiKapanadze这是地图输入键。通过传递键更新项目字段,然后发出更改,怎么样?
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() }
    }
}