我有两个 ArrayLists ar1 和 ar2。
ArrayList ar1
包含一个对象列表,每个对象都具有属性 ID、NAME 和 STATUS。
ArrayList ar2
包含一个对象列表,每个对象都具有属性 ID、NAME 和 SUBJECT。ar1 和 ar2 的大小相同。
有什么方法可以将这两个列表合并到一个新列表 ar3 中,其中包含一个对象列表,每个对象都具有属性 ID、NAME、STATUS 和 SUBJECT?
更新:两个列表中的 ID 和 NAME 相同。
我有两个 ArrayLists ar1 和 ar2。
ArrayList ar1
包含一个对象列表,每个对象都具有属性 ID、NAME 和 STATUS。
ArrayList ar2
包含一个对象列表,每个对象都具有属性 ID、NAME 和 SUBJECT。ar1 和 ar2 的大小相同。
有什么方法可以将这两个列表合并到一个新列表 ar3 中,其中包含一个对象列表,每个对象都具有属性 ID、NAME、STATUS 和 SUBJECT?
更新:两个列表中的 ID 和 NAME 相同。
public static void main(String[] args) throws Exception {
List<String> list1 = new ArrayList<String>(Arrays.asList("A", "B", "C"));
List<String> list2 = new ArrayList<String>(Arrays.asList("B", "C", "D",
"E", "F"));
List<String> result = new ArrayList<String>();
result = union(list1, list2);
System.out.println(result);
}
public static List<String> union(List<String> list1, List<String> list2) {
HashSet<String> set = new HashSet<String>();
set.addAll(list1);
set.addAll(list2);
return new ArrayList<String>(set);
}
输出:
[D, E, F, A, B, C]
Map<String, Target> map = new HashMap<>();
for (TypeWithStatus item : typesWithStatus) {
map.put(item.getId()+item.getName(), createTypeWithStatusAndSubject(item));
}
for (TypeWithSubject item : typesWithSubject) {
map.get(item.getId()+item.getName()).setSubject(item.getSubject());
}
这个想法是将第一个列表中的所有元素存储在地图中,并在第二次运行中更新地图值。这仅在两个列表都包含 id+name 方面的“相同”项目时才有效。如果没有,您将不得不添加空检查。
所以,如果我理解正确,你有一个A
s 列表和一个B
相同大小的 s 列表,并且你想要一个C
s 列表,其中第 n 个元素是列表 a 的第 n 个元素和列表 B 的第 n 个元素的并集.
好吧,首先你需要定义你的联合类:
class C {
Integer id;
String name;
String status;
String subject;
C(A a, B b) {
this.id = a.id;
this.name = a.name;
this.status = a.status;
this.subject = b.subject;
}
}
然后,您可以使用迭代器:
Iterator<A> aIterator = aList.iterator();
Iterator<B> bIterator = bList.iterator();
List<C> cList = new ArrayList(aList.size());
while (aIterator.hasNext() && bIterator.hasNext()) {
A a = aIterator.next();
B b = bIterator.next();
cList.add(new C(a, b));
}
使用带有比较器 C 的搜索功能。
定义比较器如下
if(obja.id==objb.id & obja.name=objb.name) return (a==b);
因此,对于 listA 中的每个元素,在 listB 中找到该元素,然后您将新对象框起来并添加
列表C中的那个。