从Hazelcast地图中删除元素的正确方法是什么?

时间:2014-02-24 16:01:21

标签: java loops map hazelcast

我需要从Hazelcast分布式地图中删除一个项目,我使用类似这样的代码(简化):

  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();
        }
    }

    }

但是这段代码没有删除值,地图的大小在开头时与末尾的大小相同。

当我看到Hazelcast Javadoc时,我看到此界面仅定义了按键和键的值删除。这是否意味着我不能使用标准方法如何从地图中删除值?

1 个答案:

答案 0 :(得分:10)

从地图中删除您无法通过迭代器执行的项目。迭代器是入口集的临时副本,对它的更改不会反映到地图的内容。

你的方法不是很可扩展,因为你迭代地图中的所有条目,想象你有数千兆字节的地图条目..大约50%需要在找到你的项目之前通过线路发送。

如果要删除项目,可以执行以下操作:

map.remove(somekey)

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

结合使用
IMap.executeOnEntries(EntryProcessor entryProcessor, Predicate predicate);

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