比较集合内的集合

我有这样的一套:

Set<Set> NestedSet = new HashSet<Set>(); [[Node[0], Node[1], Node[2]], [Node[0], Node[2], Node[6]], [Node[3], Node[4], Node[5]]] 

我想比较和合并嵌套集内的集合。 [0,1,2]和[0,2,6]具有共同的要素。 所以应该合并它们形成0,1,2,6。

输出应该是这样的:

 [[Node[0], Node[1], Node[2], Node[6]], [Node[3], Node[4], Node[5]]] 

有没有有效的方法?

您可以使用Collections.disjoint(Collection c1,Collection c2)来检查两个指定的集合没有共同的元素。

顺便说一下,确保你的Node类实现了hashCodeequals

 Set> result = new HashSet>(); for (Set s1 : NestedSet) { Optional> findFirst = result.stream().filter(p -> !Collections.disjoint(s1, p)).findFirst(); if (findFirst.isPresent()){ findFirst.get().addAll(s1); } else { result.add(s1); } }