3

我有两个 ArrayLists ar1 和 ar2。

ArrayList ar1包含一个对象列表,每个对象都具有属性 ID、NAME 和 STATUS。 ArrayList ar2包含一个对象列表,每个对象都具有属性 ID、NAME 和 SUBJECT。ar1 和 ar2 的大小相同。

有什么方法可以将这两个列表合并到一个新列表 ar3 中,其中包含一个对象列表,每个对象都具有属性 ID、NAME、STATUS 和 SUBJECT?

更新:两个列表中的 ID 和 NAME 相同。

4

4 回答 4

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]
于 2013-03-29T14:43:35.190 回答
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 方面的“相同”项目时才有效。如果没有,您将不得不添加空检查。

于 2013-03-29T14:40:16.537 回答
1

所以,如果我理解正确,你有一个As 列表和一个B相同大小的 s 列表,并且你想要一个Cs 列表,其中第 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));
}
于 2013-03-29T14:48:40.340 回答
0

使用带有比较器 C 的搜索功能。

定义比较器如下

if(obja.id==objb.id & obja.name=objb.name) return (a==b);

因此,对于 listA 中的每个元素,在 listB 中找到该元素,然后您将新对象框起来并添加

列表C中的那个。

于 2013-03-29T14:55:02.353 回答