我有一张地图,在我的情况下是p1 = Peripheral(<MAC>)
ch1 = p1.getCharacteristics()[3]
p1.setDelegate(MyDelegate())
p1.writeCharacteristic(ch1.valHandle + 1, b"\x01\x00")
,当在websocket上收到一些事件时,该地图正在更新。我想在此地图上实现一个可观察对象,以了解何时添加,更新或删除条目。我尝试使用ConcurrentHashMap<String, Device>
,但更改映射时未调用任何方法。
ObservableProperty
}
有人可以帮我解决这个问题吗?
答案 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>())
的操作,还需要为ConcurrentHashMap
和overrides
包括AbstractMap<K,V>
,因为它们会添加一些新操作,跟踪。上面的代码仅是示例。