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);
无论如何要做到这一点而不声明辅助收集? (跳过/忽略布尔返回)
答案 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);
顺便说一句:如果在方法中无法更改A
和B
,我认为无法创建临时列表(无论您是否在变量中保护它) )。至少C
最初可以包含元素。