Reputation: 4608
That is, if I had two or more sets, and I wanted to return a new set containing either:
Is there an easy, pre-existing way to do that?
Edit: That's the wrong terminology, isn't it?
Upvotes: 22
Views: 12257
Reputation: 958
You can use the Google-Collections Sets class which has the methods intersection() union() and symmetricDifference().
Sets.intersection(set1, set2);
Sets.union(set1, set2);
SetView view = Sets.intersection(Sets.union(set1, set2), set3);
Set result = view.copyInto(new HashSet());
Upvotes: 9
Reputation: 12792
I'm pretty sure that Jakarta Common Collections API supports unions, intersections etc.
I'd be amazed if the Google Collections API didn't as well.
Upvotes: 0
Reputation: 189906
@Milhous said:
check out the sets api. if you use addAll you can get or. If you use retainAll you can get the and. I dont know about the Xor.
It seems like if you had sets s1
and s2
you could do this to get XOR:
s1
to s3
s1.removeAll(s2);
(s1 now contains all elements not in s2)s2.removeAll(s3);
(s2 now contains all elements not in s3 = the old s1)s1.addAll(s2);
(s1 now contains the union of the above two sets)Upvotes: 3
Reputation: 14653
check out the sets api. if you use addAll you can get or. If you use retainAll you can get the and. I dont know about the Xor.
Edit: from the set documentation.
...If the specified collection is also a set, the addAll operation effectively modifies this set so that its value is the union of the two sets.
....If the specified collection is also a set, this operation effectively modifies this set so that its value is the intersection of the two sets.
Upvotes: 1
Reputation: 2232
Assuming 2 Set objects a and b
AND(intersection of two sets)
a.retainAll(b);
OR(union of two sets)
a.addAll(b);
XOR either roll your own loop:
foreach item
if(a.contains(item) and !b.contains(item) || (!a.contains(item) and b.contains(item)))
c.add(item)
or do this:
c.addAll(a);
c.addAll(b);
a.retainAll(b); //a now has the intersection of a and b
c.removeAll(a);
See the Set documentation and this page. For more.
Upvotes: 36