java - 从 Hazelcast map 中删除元素的正确方法是什么?

标签 java loops dictionary hazelcast

我需要从 Hazelcast 分布式 map 中删除一个项目,我使用类似以下代码(简化):

  public void realeaseBatchesById(int Id) {

    Iterator<Map.Entry<Long, WorkingBatch>> it = workingMap.entrySet().iterator();

    while (it.hasNext()) {
        WorkingBatch value = it.next().getValue();
        if (value.getServer().getId() == idd) {
        it.remove();
        }
    }

    }

但是这段代码并没有删除值, map 的大小在开始的时候和结束的时候是一样的。

当我看到 Hazelcast Javadoc我看到这个接口(interface)只定义了按键删除和按键删除值。这是否意味着我不能使用标准方法从 map 中删除值?

最佳答案

从 map 中删除您不能通过迭代器执行的项目。迭代器是条目集的临时副本,对其的更改不会反射(reflect)在 map 的内容上。

你的方法不是很可扩展,因为你遍历了 map 中的所有条目,假设你有千兆字节的 map 条目..在找到你的项目之前,大约 50% 需要通过线路发送。

如果你想删除一个项目,你可以这样做:

map.remove(somekey)

但最大的问题是:您如何找到您的元素。在你的情况下,你的项目显然有某种 server.id,所以你可以在那个 id 上创建一个索引,这样你就可以进行快速查找,并将它与:

IMap.executeOnEntries(EntryProcessor entryProcessor, Predicate predicate);

当您创建一个谓词(找到您的条目)并创建一个条目处理器(可以删除您的条目)时,您可以进行更高效的删除。

关于java - 从 Hazelcast map 中删除元素的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21992685/

相关文章:

Java AES/GCM 解密失败

java - eclipse : Can't import class from another project's test folder

金融随机指标的Java实现

Python 在嵌套循环内继续,到达正确的嵌套级别

c++ - C++ 中不同类的方法映射

java - Spring Security 身份验证未给出 401 错误

java - 组合 for 和 while 循环 (Java)

c# - 是否可以在 1 行代码内计算 : increment index by 1 and wrap back to 0 if(index > list. 计数)?

Python:在生成器中生成字典元素?

java - 将 2 个集合转换为 Map