java - 没有重复的集合(基于 id)但保留最高版本号

标签 java collections duplicates

这似乎应该有一个标准的解决方案,但我找不到我要找的东西。手动实现并不难,但也许我的工具箱中缺少一个工具?

在伪代码中,我想要一个类似集合的集合,给定现有条目

{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/

相关文章:

java.text.Collat​​or 将 "v"和 "w"视为瑞典语/区域设置的相同字母

ios - Swift2 许多 UIEvent 都有巨大的延迟

scala - 了解可变序列

java - 在我的例子中,我有什么选择来防止 Java 中的重复代码

sql-server - 将数据导入 SQL Server 时跳过重复项

java - 如何在谷歌地图上放置标记

java - 递归方法中的泛型

java - Java 中的类和继承——我做错了什么?

android - 在 Android 中按字母顺序排序列表

pyspark - 如何在pyspark数据框中查找重复的列值