3

と の 2 つArrayListspinklistありnormallistます。以下のコードに示すように、両方を比較し、両方から一意の値と重複する値を見つけています。

List<String> pinklist = t2.getList();
List<String> normallist = t.getList();
ArrayList<String> duplicatevalues = new ArrayList<String>();
ArrayList<String> uniquevalues = new ArrayList<String>();

for (String finalval : pinklist) {
    if (pinklist.contains(normallist)) {
        duplicatevalues.add(finalval);
    } else if (!normallist.contains(pinklist)) {
        uniquevalues.add(finalval);
    }
}

duplicateValues適切に取得していますが、一意の値を取得していません。

4

7 に答える 7

17

あなたはfinalval自分の条件を無視していて、代わりに一方のリストにもう一方のリストが含まれているかどうかを尋ねます。

あなたはこのようにそれを行うことができます:

// Variable names edited for readability
for (String item : pinkList) {
    if (normalList.contains(item)) {
        duplicateList.add(item);
    } else {
        uniqueList.add(item);
    }
}

ただし、これらを「一意の」または「重複した」アイテムとは実際には呼びません。これらは通常、1つのコレクション内のアイテムに関するものです。これは、あるリストの各アイテムが別のリストにあるかどうかをテストしているだけです。この場合、それは「既存」と「新規」のようなものだと思います。

これらをセットベースの方法で扱っているのでHashSet<E>、リストの代わりになどのセット実装を使用することをお勧めします。GuavaSetsクラスは、セットを操作するための便利なメソッドを提供します。

于 2012-12-05T07:54:29.150 に答える
17

これはすべきです:

List<String> pinklist = t2.getList();
List<String> normallist = t.getList();

ArrayList<String> duplicates = new ArrayList<String>(normallist);
duplicates.retainAll(pinklist);

ArrayList<String> uniques = new ArrayList<String>(normallist);
uniques.removeAll(pinklist);  

説明:

  • EveryListは別のリストをコンストラクターのパラメーターとして取り、その値をコピーできます。

  • retainAll(list2)に存在しないエントリをすべて削除しますlist2

  • removeAll(list2)に存在するすべてのエントリを削除しますlist2

  • 元のリストを削除/保持したくないのは、元のリストが変更されるためです。そのため、コンストラクターでそれらをコピーします。

于 2012-12-05T07:56:40.793 に答える
0

このようにしてください-

for (String finalval : pinklist)
{   
    if(normallist.contains(finalval))
    {
        // finalval is both in pinklist and in
        // normallist. Add it as a duplicate.
        duplicatevalues.add(finalval);  // this will get you the duplicate values
    }
    else {
        // finalval is in pinklist but not in
        // normallist. Add it as unique.
        uniquevalues.add(finalval);    // this will get you the values which are in 
                                       // pinklist but not in normallist
    }
}

// This will give you the values which are
// in normallist but not in pinklist.
for(String value : normallist) {
    if(!pinklist.contains(value)) {
        uniquevalues.add(value);
    }
}
于 2012-12-05T07:55:10.610 に答える
-1

リスト全体をcontainsメソッドに渡すのはなぜですか?finalvalむしろ合格する必要があります。

于 2012-12-05T08:00:18.507 に答える