java - 在原子值的情况下从 map 中删除键

标签 java dictionary concurrency atomic key-value

我想从 map 中删除键,以防键的值为零(0) 我可以使用
map.values().removeAll(Collections.singleton(0l)); 实现它


在我使用 Map<String,Long> 之前它一直很好用 但现在我们已将实现更改为 Map<String,AtomicLong> 现在它不会删除值为零的键,因为我使用原子变量作为值。
我试过的小代码片段::

    Map<String, AtomicLong> atomicMap = new HashMap<String,AtomicLong>();
    atomicMap.put("Ron", new AtomicLong(0l));
    atomicMap.put("David", new AtomicLong(0l));
    atomicMap.put("Fredrick", new AtomicLong(0l));
    atomicMap.put("Gema", new AtomicLong(1l));
    atomicMap.put("Andrew", new AtomicLong(1l));    

    atomicMap.values().removeAll(Collections.singleton(new AtomicLong(0l)));

    System.out.println(atomicMap.toString());

输出为
{Ron=0, Fredrick=0, Gema=1, Andrew=1, David=0}

如您所见,值为 0 的键没有被删除。任何人都可以提出解决方案,这将有很大帮助。
谢谢。

最佳答案

如果您使用的是 Java8,可以使用 removeIf 方法。

atomicMap.values().removeIf(x -> x.get() == 0L);
// Prints {Gema=1, Andrew=1}

关于java - 在原子值的情况下从 map 中删除键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34516695/

相关文章:

java - Kotlin 中的任何变量名

python - 如何保留 python 字典中项目的顺序?

c++ - 如何从 C++ 中的 pthread 返回 double 值?

dictionary - 如何安全地允许当前访问go中的嵌套 map ?

go - 修改 goroutine 中的结构?

java - Clojure 数据结构序列化

java - 主线程等待isDeamon()设置为false end的所有线程

java - Struts应用程序的多选项卡导致数据不一致

java - 为什么 resize 是这样实现的?

c++ - 使用 std::map::at 时出错