我需要从 Java ConcurrentHashMap (在 Scala 代码中)获取先前的值和新的值。为了保持线程安全,我使用
compute
块,它仅返回新值。是否可以在不使用带有初始 null 的 var 的情况下同时获取新值和先前值?下面是我当前的解决方案:
map: ConcurrentHashMap[String, Game] = new ConcurrentHashMap
var previousValue: Game = null
val newValue = map.compute(
"key",
(_, value) => {
previousValue = Option(value).getOrElse(initialValue)
setNewValue(previousValue)
}
)
(previousValue, newValue)
“...我需要从 Java ConcurrentHashMap(在 Scala 代码中)获取以前的值和新值。...”
这是 Java 中的解决方案,您可以移植。
有点不合时宜的做法;使用 ListIterator 遍历 key-set。
Map<String, Integer> m = new HashMap<>() {{
put("A", 1);
put("B", 2);
put("C", 3);
put("D", 4);
put("E", 5);
}};
List<String> l = new ArrayList<>(m.keySet());
ListIterator<String> i = l.listIterator();
String b, a = i.next();
while (i.hasNext()) {
b = i.next();
System.out.printf("b = %s, a = %s%n", b, a);
if (i.hasNext()) a = b;
}
b = B, a = A
b = C, a = B
b = D, a = C
b = E, a = D