Java Merge 2自定义类结果
我有2个自定义Java类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
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???