0

私は Class ArrayList を持っているので、 Autor が同じ場合は重複する Keywords を削除する必要がありますが、これらが異なる場合は削除しません。次のコードは、最初のインデックス (i=0) でのみ重複を削除し、何も削除しません。

ありがとうございます!

例:

ここに例があります:

1PPP

2 EEE

3BAAA

4BLL

5A CCC

2 EEE

5A CCC

この場合、「A」には別の親 (2 と 5) があるため、任意の行を削除したくありません。

        int size = ls.size();
    int duplicates = 0;

    // not using a method in the check also speeds up the execution
    // also i must be less that size-1 so that j doesn't
    // throw IndexOutOfBoundsException
    for (int i = 0; i < size - 1; i++) {
        for (int j = i + 1; j < size; j++) {

                    if(ls.get(j).getKeywords().equals(ls.get(i).getKeywords()) && ls.get(j).getAutor().equals(ls.get(i).getAutor()) ){
                        duplicates++;
                        ls.remove(j);}


            // decrease j because the array got re-indexed
            j--;
            // decrease the size of the array
            size--;
        } // for j
    } // fo
4

2 に答える 2

0

リストをキーと後処理でグループ化して、重複を削除できます。

Googleguavaマルチマップと関数を使用したGroupByの実装

編集:

もう1つの興味深い方法は、equalsメソッドを実装し、ハッシュセット(または同様のもの)を使用することです。以下を参照してください。

リストから重複を削除する

于 2012-10-13T16:02:56.877 に答える
0

この問題に対する最善のアプローチは、リストを作成することですnon duplicates。したがって、別のリストを宣言し、最初のリストを繰り返しながら、アイテムがそのリストに存在するかどうかを確認し、そうでない場合はそのアイテムのみを追加します。以下はサンプルソースコードです。

条件をシミュレートするために、意図的に loop と equals を使用していることに注意してください。

public static void main(String[] args) throws InterruptedException {
    List<Integer> list = new ArrayList<Integer>();

    for (int i = 0; i < 3; i++) { //Add some duplicates
        list.add(new Integer(4));
        list.add(new Integer(5));
        list.add(new Integer(6));
    }
    List<Integer> newList = new ArrayList<Integer>();
    for (Integer first : list) {
        boolean contains = false;//if this flag is false after iteration then item will be added

        for (Integer copy : newList)
            if (first.equals(copy)) {// You will have to specify your condition here
                contains = true;
                break;
            }
        if(!contains)
            newList.add(first);//add item if it was not present
    }
    System.out.println(list);
    System.out.println(newList);

}

出力:

[4, 5, 6, 4, 5, 6, 4, 5, 6] <-- List with duplicates
[4, 5, 6] <-- List with no duplicates
于 2012-10-13T15:56:14.500 に答える