2

重複の可能性:
同時変更例外: ArrayList への追加

このメソッドを使用して、配列リストから重複した値を削除しようとしています:

 public void hasDuplicates(List<Artifact> p_cars) {
    final List<String> usedNames = new ArrayList<String>();
    for (Artifact car : p_cars) {
        final String name = car.getObjectId();

        if (usedNames.contains(name)) {
            p_cars.remove(car);

        }

        usedNames.add(name);
    }

}

配列リストを同時に変更せずに、これらの重複した値を削除するにはどうすればよいですか?

コンテキストに役立つ場合は、リストビューにデータを入力する配列リストでこれを行っています。

ありがとう!

4

1 に答える 1

6

コレクションを繰り返し処理している間は、コレクションを変更できません。唯一の例外は、反復子の remove メソッドを使用することです。

 public void hasDuplicates(List<Artifact> p_cars) {
    final List<String> usedNames = new ArrayList<String>();
    Iterator<Artifact> it = p_cars.iterator();
    while (it.hasNext()) {
        Artifact car = it.next();
        final String name = car.getObjectId();

        if (usedNames.contains(name)) {
            it.remove();

        } else {
            usedNames.add(name);
        }
    }

}
于 2012-05-17T17:39:54.017 に答える