在地图上可观察到,以检测何时添加,更新已删除的条目

时间:2019-06-04 09:00:58

标签: dictionary kotlin delegates observable concurrenthashmap

我有一张地图,在我的情况下是p1 = Peripheral(<MAC>) ch1 = p1.getCharacteristics()[3] p1.setDelegate(MyDelegate()) p1.writeCharacteristic(ch1.valHandle + 1, b"\x01\x00") ,当在websocket上收到一些事件时,该地图正在更新。我想在此地图上实现一个可观察对象,以了解何时添加,更新或删除条目。我尝试使用ConcurrentHashMap<String, Device>,但更改映射时未调用任何方法。

ObservableProperty

}

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

问题在于int findIndex(String str){ int index = -1; Pattern p = Pattern.compile("(?s).*(x|y|z)"); Matcher m = regex.matcher(str); if(m.find()){ index = m.start(1); } return index; } 不是属性,您不能以这种方式使用属性委托。您需要做的是为Map编写一个装饰器,如下所示:

Map

在这里,我们将所有操作委托给后备class ObservableMap<K, V>(private val map: MutableMap<K, V>) : MutableMap<K, V> by map { override fun put(key: K, value: V): V? { TODO("not implemented") } override fun putAll(from: Map<out K, V>) { TODO("not implemented") } override fun remove(key: K): V? { TODO("not implemented") } } ,您只需在上述方法中添加/删除时实现逻辑即可。

我不确定map是什么意思,但是如果您的意思是“映射中的值被覆盖”,则可以在update中处理它。

您可以像这样使用put

ObservableMap

请注意,如果要支持val map = ObservableMap(ConcurrentHashMap<String, String>()) 的操作,还需要为ConcurrentHashMapoverrides包括AbstractMap<K,V>,因为它们会添加一些新操作,跟踪。上面的代码仅是示例。