我有两个ArrayLists ar1和ar2。
ArrayList ar1
包含一个对象列表,每个对象都有属性ID,NAME和STATUS。
ArrayList ar2
包含一个对象列表,每个对象具有属性ID,NAME和SUBJECT。
ar1和ar2的大小都相同。
有什么方法可以将两个列表合并到一个新列表ar3中,其中包含一个对象列表,每个对象都有属性ID,NAME,STATUS和SUBJECT?
更新:两个列表中的ID和NAME相同。
答案 0 :(得分:5)
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]
答案 1 :(得分:2)
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方面包含“相同”项目的情况。如果没有,您将不得不添加空检查。
答案 2 :(得分:1)
所以,如果我理解正确,你有一个A
列表和一个大小相同的B
列表,你想要一个C
列表,其中第n个element是列表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));
}
答案 3 :(得分:0)
使用带比较器C的搜索功能。
将比较器定义如下
if(obja.id==objb.id & obja.name=objb.name) return (a==b);
因此,对于listA中的每个元素,在listB中找到元素,然后构建新对象并添加
在listC中。