一尘不染

什么是最好的方式来获得在Java中的两个集合之间的对称差异?

java

我想知道是否有一种快速/干净的方法来获得两组之间的对称差异?

我有:

Set<String> s1 = new HashSet<String>();
s1.add("a");
s1.add("b");
s1.add("c");

Set<String> s2 = new HashSet<String>();
s2.add("b");

我需要类似的东西:

Set<String> diff = Something.diff(s1, s2);
// diff would contain ["a", "c"]

为了澄清我需要 对称的 区别。


阅读 215

收藏
2020-09-08

共1个答案

一尘不染

您可以使用Google Guava库中的一些功能(这确实很棒,我强烈推荐!):

Sets.difference(s1, s2);
Sets.symmetricDifference(s1, s2);

差异()symmetricDifference()的
Javadocs

symmetricDifference()确实满足您的要求,但difference()通常也有帮助。

两种方法都返回实时视图,但是例如您可以调用.immutableCopy()结果集以获得不变的集。如果您不想要视图,但需要一个可修改的实例,请致电.copyInto(s3)。有关这些方法,请参见SetView

2020-09-08