Java通过公共(public)属性比较不同的对象

标签 java list properties compare contains

我有 ObjectA & ObjectB .两者都有一个 property称为 ID (Long) . 我有 2 List , ListA其中包含对象类型 ObjectAListB其中包含对象类型 ObjectB .

我要填写ListC , 以及来自 ListA 的所有对象和 ListB但没有重复。

我无法使用 contains方法因为ObjectAObjectB是不同的对象,我必须通过属性 ID 进行比较.

我知道最好的解决方案是 ObjectAObjectB extends一个Super class ,但我现在不能改变它,我只需要找到一个临时解决方案来让它工作。

我试过这个:

listC.addAll(listA);    

for(int j=0; j<ListA.size(); j++) {
    for(int k=0; k<ListB.size(); k++) {
        ObjectA objectA = ((ObjectA)listA.get(j));
        ObjectB objectB = ((ObjectB)listB.get(k));

        if(!objectA.getId().equals(objectB.getId())) {
            listC.add(objectB);
        }
    }
}

有什么想法吗?我快要疯了。

最佳答案

如果它们都具有相同的属性,请编写一个只有值 ID(可能带有 getter)的接口(interface)(这就是它们存在的原因),并在您的类 ObjectA 和 ObjectB 中实现它。然后你可以编写自己的比较器(使用你的接口(interface)类型)或者因为你只需要等于,只需重写这个方法(那不会干净)。这应该是最干净的方式。

关于Java通过公共(public)属性比较不同的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35057166/

相关文章:

java - java 属性文件中的 "\"是什么意思?

Java单例类与最终类

java - 在 Guava 事件线程安全上更新 JTable 的模式

Python:比较 2 个不同大小的元组列表

java - 属性的级别值错误,无法为 java.util.logging.FileHandler 设置级别

jquery - 编写 jQuery 插件,向 jQuery 对象添加属性

Java String.split 不工作

java - Java中的HTML实体解码: apostrophe

python - 在限制下从 int 列表生成所有可能的组合

python - 嵌套字典和列表的大小