集合addAll removeAll返回布尔值

时间:2012-11-30 15:42:48

标签: java

C是类型Set<T>的集合,F(x)返回Set的集合,我想要做的是在集合之间执行操作,如union,intersection,difference

// C union ( F(X) \ F(Y))
C.addAll( F(X).removeAll( F(Y)))); //error boolean because removeAll returns a boolean

替代我可以

C_aux = new HashSet<T> ( F(X));
C_aux.removeAll( F(Y)); 
C.addAll( C_aux);

无论如何要做到这一点而不声明辅助收集? (跳过/忽略布尔返回)

2 个答案:

答案 0 :(得分:6)

java.util.Collection API:

a.retainAll(b); // intersection
a.removeAll(b); // difference
a.addAll(b); // union

Google Guava com.google.common.collect.Sets API:

Sets.union(a, b);
Sets.intersection(a, b);
Sets.difference(a, b);

如果您真正需要,可以写一行内容:

Sets.union(C, Sets.difference(F(X), F(Y)))

但请记住,结果集是只读的,所以如果你需要真正的Set使用C.removeAll而不是

答案 1 :(得分:2)

怎么样

C.addAll(A.removeAll(B)?A:A);

通常我会认为这是一个笑话,但在这种情况下,您可以保存创建列表。在忘记浇水约3个月后,它仍然像我的“装饰”植物一样难看......:P

编辑:这当然也有效,但仍会改变A。

A.removeAll(B);
C.addAll(A);

顺便说一句:如果在方法中无法更改AB,我认为无法创建临时列表(无论您是否在变量中保护它) )。至少C最初可以包含元素。