3

2 つの ArrayList ar1 と ar2 があります。

ArrayList ar1各オブジェクトが属性 ID、NAME、および STATUS を持つオブジェクトのリストを含みます。 ArrayList ar2各オブジェクトが属性 ID、NAME、および SUBJECT を持つオブジェクトのリストを含みます。ar1 と ar2 はどちらも同じサイズです。

2 つのリストを新しいリスト 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());
}

アイデアは、最初のリストのすべての要素をマップに格納し、2 回目の実行でマップの値を更新することです。これは、両方のリストに id+name に関して「同じ」アイテムが含まれている場合にのみ機能します。そうでない場合は、null チェックを追加する必要があります。

于 2013-03-29T14:40:16.537 に答える
1

したがって、私が正しく理解していれば、As のリストと s のリストBが同じサイズでありC、n 番目の要素がリスト a の n 番目の要素とリスト B の n 番目の要素の和集合である s のリストが必要です。 .

まず、ユニオン クラスを定義する必要があります。

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 の要素を見つけてから、新しいオブジェクトをフレームに入れて追加します

それはlistCにあります。

于 2013-03-29T14:55:02.353 に答える