获得两套之间的差异
所以如果我有两套:
Set<int> test1 = new HashSet<Integer>(); test1.add(1); test1.add(2); test1.add(3); Set<int> test2 = new HashSet<Integer>(); test2.add(1); test2.add(2); test2.add(3); test2.add(4); test2.add(5);
有没有办法比较他们,只有一组4和5返回?
尝试这个
test2.removeAll(test1);
集#的removeAll
从该集合中移除指定集合中包含的所有元素(可选操作)。 如果指定集合也是集合,则此操作将有效地修改此集合,使其值为两个集合的非对称集合差异。
如果您使用Guava(以前的Google Collections)库,有一个解决scheme:
SetView<Number> difference = com.google.common.collect.Sets.difference(test2, test1);
返回的SetView
是一个Set
,它是一个实时表示,你可以使不可变的或复制到另一个集合。 test1
和test2
保持不变。
是:
test2.removeAll(test1)
虽然这会改变test2
,所以如果你需要保留它,创build一个副本。
另外,你的意思可能是<Integer>
而不是<int>
。
如果你正在使用Java 8,你可以尝试这样的事情:
public Set<Number> difference(final Set<Number> set1, final Set<Number> set2){ final Set<Number> larger = set1.size() > set2.size() ? set1 : set2; final Set<Number> smaller = larger.equals(set1) ? set2 : set1; return larger.stream().filter(n -> !smaller.contains(n)).collect(Collectors.toSet()); }