从 ConcurrentHashMap 获取先前值和新值的功能方法

问题描述 投票:0回答:1

我需要从 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 scala concurrenthashmap
1个回答
0
投票

“...我需要从 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
© www.soinside.com 2019 - 2024. All rights reserved.