2017-05-05 45 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; 

我想答案是[“分拆上市”] 这种方法eleminates的黎民元素,因此我得到一个空列表。有没有办法实现我想要的?

+0

回答应该是'[ '分拆上市']'。 –

回答

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)list1中删除所有list2元素。但是,请注意removeAll()方法删除了list1中的所有匹配(与equals)元素。

所以,你的情况,如果你想删除的基础上list2出现次数的元素,你可以使用remove()如下图所示:

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

我试过在groovy控制台。但它返回布尔值。我在这里错过了什么吗? –

+0

removeAll返回布尔值,而输出内容将在list1中 – developer

+0

它在原始'list'中进行更改。 –

0

Java不支持运算符重载,所以你应改为使用。

list1.removeAll(list2);