Java Merge 2自定义类结果

Java Merge 2自定义类结果,java,arraylist,Java,Arraylist,我有2个自定义Java类 private MyCustomClass1 obj1; private MyCustomClass2 obj2; 每个属性都有以下多个属性: MyCustomClass1 { attr1, attr2, commonattrId, attr3 } MyCustomClass2 { attr4, attr5, commonattrId, attr6 } MyCompositeClass { MyCustomClass1 obj1; MyCusto

我有2个自定义Java类

private MyCustomClass1 obj1;
private MyCustomClass2 obj2;
每个属性都有以下多个属性:

MyCustomClass1 {
attr1,
attr2,
commonattrId,
attr3
}


MyCustomClass2 {
attr4,
attr5,
commonattrId,
attr6
}
MyCompositeClass {
    MyCustomClass1 obj1;
    MyCustomClass2 obj2;
}
如您所见,它们中的每一个都有一个公共属性commonattrId,只需添加它就可以了

还有一个复合类定义如下:

MyCustomClass1 {
attr1,
attr2,
commonattrId,
attr3
}


MyCustomClass2 {
attr4,
attr5,
commonattrId,
attr6
}
MyCompositeClass {
    MyCustomClass1 obj1;
    MyCustomClass2 obj2;
}
现在我的一个查询执行返回下面的列表

清单1

还有一个查询执行,它在下面的列表中返回我

清单2


我的问题是,如果我有一个commonattrId,我可以合并上面的两个列表吗

稍长,但其思想是覆盖MyClass1和MyClass2中的相等值:

我不知道你的问题的所有参数,但可能有更好的方法。例如:让MyClass1和MyClass2都继承自一个公共类,即MyBaseClass,并创建该类的集合,而不是复合类MyCompositeClass。
或者,您可以使用集合来代替列表,并创建集合交集。

您可以为其中一个列表创建从id到对象的映射,然后使用映射中的数据迭代另一个列表以创建新列表

List<MyCompositeClass> combine(List<MyCustomClass1> myList1, List<MyCustomClass2> myList2) {
   // create map
   Map<Long, MyCustomClass1> idToObj = new HashMap<>();
   for (MyCustomClass1 o : myList1) {
       idToObj.put(o.commonattrId, o);
   }
   // construct result list
   List<MyCompositeClass> result = new ArrayList<>();
   for (MyCustomClass2 o : myList2) {
       MyCustomClass1 o1 = map.get(o.commonattrId);
       if (o1 != null) {
           MyCompositeClass combined = new MyCompositeClass();
           combined.obj1 = o1;
           combined.obj2 = o;
           result.add(combined);
       }
   }
   return result;
}

如果commonattrId值在每个列表中是两两不同的,但由于字段名以Id作为后缀,这将只添加两个列表中所有可能的对象组合,我做了一个有根据的猜测…

java-8风格的lambda是您的选择吗?只是为了澄清一下:组合它们意味着创建一个包含MyCompositeClass对象的新列表,其中obj1.commonattrId==obj2.commonattrId???