我不想输入整个代码(我认为这是不必要的)。我的问题是:我有两个大字符串,我用'分开';'并添加到两个Hashsets。有了这个,我想检查两个集合的元素是否相同,如果它们不相同 - 打印出不同的元素。我不希望通过任何迭代来实现它,因为相应的元素是相同的,因此不需要遍历每个元素。
Set latestStableRevConfigurationSet = new HashSet(Arrays.asList(latestStableRevConfiguration.split(";")));
Set currentRevConfigurationSet = new HashSet(Arrays.asList(currentRevConfiguration.split(";")));
assertTrue(latestStableRevConfigurationSet.containsAll(currentRevConfigurationSet));
assertTrue(currentRevConfigurationSet.containsAll(latestStableRevConfigurationSet));
上面的方法我只能断言集合是否“相同”但是如何实现A-B / B-A以便打印出不同的元素?
答案 0 :(得分:2)
试试这个:
Set<String> latestStableRevConfigurationCopy = new HashSet<>(latestStableRevConfigurationSet);
Set currentRevConfigurationCopy = currentRevConfigurationSet;
latestStableRevConfigurationCopy.removeAll(currentRevConfigurationSet );
currentRevConfigurationCopy.removeAll(latestStableRevConfigurationSet );
//this would print all the different elements from both the sets.
System.out.println(latestStableRevConfigurationCopy );
System.out.println(currentRevConfigurationCopy );
答案 1 :(得分:1)
你可以使用番石榴:
SetView<Number> difference = com.google.common.collect.Sets.symmetricDifference(set2, set1);
如果您不想添加新的依赖性,可以稍微修改Github repo上提供的代码。
答案 2 :(得分:1)
您想要只在一个集合中的所有元素。一种方法是将所有元素与
结合起来Set union = new HashSet();
union.addAll(latestStableRevConfigurationSet);
union.addAll(currentRevConfigurationSet);
然后取交叉点(即公共元素)
Set intersection = new HashSet();
intersection.addAll(latestStableRevConfigurationSet);
intersection.retainAll(currentRevConfigurationSet);
最后减去两个:
union.removeAll(intersection);