这似乎应该有一个标准的解决方案,但我找不到我要找的东西。手动实现并不难,但也许我的工具箱中缺少一个工具?
在伪代码中,我想要一个类似集合的集合,给定现有条目
{id_1, v_1}, {id_2, v_2}
调用addAll()
{id_1, v_2}, {id_2, v_1}
将留下
{id_1, v_2}, {id_2, v_2}
即原来的 id_1 被更新的版本所取代;原始 id_2 保留下来,因为它比传入的更新。
我浏览了 Guava,但没有发现任何问题。我对 Apache 集合不是很熟悉,也许可以从中构建一些东西?
谢谢大家
最佳答案
您可以包装 map 并提供其他方法来检查项目版本。
这里是 put
方法,例如。
class MyMap<ID, E> extends HashMap<ID, E extends Versioned & HasId<ID>> {
public void put(E elem) {
if (containsKey(elem.getId()) {
E exist = get(elem.getId());
if (elem.version.isGreater(exist.version)) super.put(elem.getId(), elem);
} else {
super.put(elem.getId(), elem);
}
}
我建议使用 Map 而不是 Set,因为 this问题。
关于java - 没有重复的集合(基于 id)但保留最高版本号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30802399/