2017-05-05 15 views
0

繰り返し要素を持つリストを減算したい。たとえば、次のように繰り返し要素を持つgrailsの減算リスト

List<String> list1 = ['APPROVE', 'APPROVE', 'CARVEOUT', 'DENY', 'CARVEOUT']; 
List<String> list2 = ['APPROVE', 'CARVEOUT', 'DENY', 'APPROVE'] 
// i tried 
List<String> final = list1-list2; 

私が欲しい答えが[「CARVEOUT」] この方法は、それゆえ私は空のリストを取得していますcommom要素をeleminatesです。私が望むものを達成する方法はありますか?

+0

回答は '' [ 'CARVEOUT']でなければなりません。 –

答えて

1

あなたがオブジェクトの最初の発生を削除.remove(Object o)方法を使用することができます。

List<String> list1 =new ArrayList(Arrays.asList(new String[]{"APPROVE", "APPROVE", "CARVEOUT", "DENY", "CARVEOUT"})); 
List<String> list2 =new ArrayList(Arrays.asList(new String[]{"APPROVE", "APPROVE", "CARVEOUT", "DENY"})); 

for(String str:list2) 
    list1.remove(new String(str)); 

System.out.println(list1); 

は、出力を提供します:

[CARVEOUT] 
+0

はい、私が欲しいのはまさにそれです。 –

3

list1.removeAll(list2)を使用して、list2のすべての要素をlist1から削除できます。ただし、removeAll()メソッドは、のすべての一致するequals)要素を削除します。だから、

、あなたがlist2の発生回数に基づいて要素を削除したい場合は、以下のようにあなたのケースでは、あなたがremove()を使用することができます。

list2.stream().forEach(element -> list1.remove(element)); 
+0

私はそれをGroovyコンソールで試しました。しかし、ブール値を返します。ここに何かがないのですか? –

+0

removeAllはbooleanを返しますが、出力内容はlist1になります – developer

+0

元の 'list'に変更を加えます。 –

0

Javaは演算子のオーバーロードをサポートしていませんので、あなた代わりに使用する必要があります。

list1.removeAll(list2);

関連する問題