我需要从Java ConcurrentHashMap(在Scala代码中)中获取先前值和新值。为了保持线程安全,我使用compute
块,它只返回新值。是否可以在不使用初始值为null的var的情况下同时获取新值和先前值?下面是我目前的解决方案:
map: ConcurrentHashMap[String, Object] = new ConcurrentHashMap
def foo = {
var previousValue: Object = null
val newValue = map.compute("key", (_, value) => {
previousValue = Option(value).getOrElse(initialValue)
setNewValue(previousValue)
}
)
(previousValue, newValue)
}
字符串
2条答案
按热度按时间waxmsbnn1#
不可以。当前版本的ConcurrentHashMap无法执行此操作。
wb1gzix02#
这是一个用 Java 编写的解决方案,你可以移植。
一种有点不现代的方法;用 * ListIterator * 遍历 key-set。
个字符