使用重复元素减去grails中的List

时间:2017-05-05 07:03:34

标签: java list 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元素,因此我得到一个Empty列表。有没有办法达到我想要的目的?

3 个答案:

答案 0 :(得分:3)

您可以使用list1.removeAll(list2)list2中删除所有list1元素。但是,请注意removeAll()方法会删除equals中的所有匹配(包含list1)元素。

因此,在您的情况下,如果您想根据list2的出现次数删除元素,可以使用remove(),如下所示:

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

答案 1 :(得分:1)

您可以使用 .remove(Object o) 方法删除第一次出现的对象。

item_id

提供输出:

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);

答案 2 :(得分:0)

Java不支持重载运算符,因此您应该使用。

<table width="100%"> <tbody> <tr> <td>id</td> <td>book</td> <td>colour</td> <td>name</td> <td>public</td> </tr> <tr> <td>1</td> <td>Book1</td> <td>Red</td> <td>This is a book one</td> <td>#number1111111</td> </tr> <tr> <td>2</td> <td>Book2</td> <td>White</td> <td>This is a book two</td> <td>#number2222222</td> </tr> <tr> <td>3</td> <td>Book3</td> <td>Blue</td> <td>This is a book three</td> <td>#number33333333</td> </tr> <tr> <td>4</td> <td>Book4</td> <td>Yellow</td> <td>This is a book four</td> <td>#number44444444</td> </tr> </tbody> </table>