gpt4 book ai didi

java - 从 ConcurrentMap 中获取和删除所有当前条目

转载 作者:行者123 更新时间:2023-11-30 07:51:25 25 4
gpt4 key购买 nike

我有一个 ConcurrentHashMap 累积了一些应该定期发送到某处的更改(用于某种复制)。关于更改,只有任何关键事项的最新值。

所以我需要获取并删除一些快照。快照不需要是原子的,只要它的每个条目在操作过程中的某个时刻反射(reflect)原始 map 的状态就足够了。

重要的是,只有结果中存在且最新的条目才可以从原始 map 中删除。我想,应该做以下事情:

<K, V> ConcurrentMap<K, V> getAndRemoveAll(ConcurrentMap<K, V> map) {
ConcurrentHashMap<K, V> result = new ConcurrentHashMap<>(map);
result.forEach((resultKey, resultValue) ->
map.computeIfPresent(resultKey,
(k, mapValue) -> mapValue==resultValue ? null : mapValue));
return result;
}

这真的是正确的吗?单次迭代是否可行?

最佳答案

您可以使用方法remove(Object key, Object value) ,它只会删除条目如果值是最新的,并且操作是原子的。

所以这就是我的建议:

<K, V> Map<K, V> getAndRemoveAll(ConcurrentMap<K, V> map) {
return map.entrySet().stream()
.filter(e -> map.remove(e.getKey(), e.getValue()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
}

关于java - 从 ConcurrentMap 中获取和删除所有当前条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47123556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com