Java:有一种简单,快速的方法可以将AND,OR或XOR组合在一起吗?
也就是说,如果我有两个或更多集合,我想返回一个包含以下任一集合的新集合:
- 每组中的所有元素都有共同点(AND)。
- 每组(OR)的所有元素总数。
- 每组的所有元素都是独一无二的。 (XOR)。
是否有一种简单的,预先存在的方法可以做到这一点?
编辑:这是错误的术语,不是吗?
假设2设置对象a和b
AND(两组交集)
a.retainAll(b);
或(两套联合)
a.addAll(b);
XOR要么滚动你自己的循环:
foreach item if(a.contains(item) and !b.contains(item) || (!a.contains(item) and b.contains(item))) c.add(item)
或者这样做:
c.addAll(a); c.addAll(b); a.retainAll(b); //a now has the intersection of a and b c.removeAll(a);
请参阅设置文档和此页面 。 更多。
您可以使用具有方法intersection()union()和symmetricDifference()的Google-Collections Sets类 。
Sets.intersection(set1, set2); Sets.union(set1, set2); SetView view = Sets.intersection(Sets.union(set1, set2), set3); Set result = view.copyInto(new HashSet());
@Milhous说:
看看套api。 如果你使用addAll,你可以得到或。 如果你使用retainAll你可以得到和。 我不知道Xor。
看起来如果你设置了s1
和s2
你可以这样做以获得XOR:
- 将集合
s1
复制到s3
-
s1.removeAll(s2);
(s1现在包含不在s2中的所有元素) -
s2.removeAll(s3);
(s2现在包含不在s3 =旧s1中的所有元素) -
s1.addAll(s2);
(s1现在包含上述两组的并集)
看看套api 。 如果你使用addAll,你可以得到或。 如果你使用retainAll你可以得到和。 我不知道Xor。
编辑:从设置文档。
…如果指定的集合也是一个集合,则addAll操作会有效地修改此集合,使其值为两个集合的并集。
….如果指定的集合也是一个集合,则此操作会有效地修改此集合,使其值为两个集合的交集。
我很确定Jakarta Common Collections API支持联合,交叉等。
如果Google Collections API不太好,我会感到惊讶。