Java: Is there an easy, quick way to AND, OR, or X

2019-01-18 02:35发布

That is, if I had two or more sets, and I wanted to return a new set containing either:

  1. All of the elements each set has in common (AND).
  2. All of the elements total of each set (OR).
  3. All of the elements unique to each set. (XOR).

Is there an easy, pre-existing way to do that?

Edit: That's the wrong terminology, isn't it?

5条回答
爷的心禁止访问
2楼-- · 2019-01-18 03:05

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.

查看更多
走好不送
3楼-- · 2019-01-18 03:08

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.

查看更多
Viruses.
4楼-- · 2019-01-18 03:26

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());
查看更多
时光不老,我们不散
5楼-- · 2019-01-18 03:27

@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:

  1. copy the set s1 to s3
  2. s1.removeAll(s2); (s1 now contains all elements not in s2)
  3. s2.removeAll(s3); (s2 now contains all elements not in s3 = the old s1)
  4. s1.addAll(s2); (s1 now contains the union of the above two sets)
查看更多
甜甜的少女心
6楼-- · 2019-01-18 03:30

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.

查看更多
登录 后发表回答