当两个元素共用时,java合并设置
这是compare sets的后续报道
我有
Set<Set<Node>> NestedSet = new HashSet<Set<Node>>();
[[Node[0], Node[1], Node[2]], [Node[0], Node[2], Node[6]], [Node[3], Node[4], Node[5]] [Node[2], Node[6], Node[7]] ]
当有两个元素相同时,我想合并这些集合。例如,0,1,2和0,2,6有两个共同的元素,所以将它们合并形成[0,1,2,6]
[0,1,2,6]和[2,6,7]还有2和6共同点。因此,合并它们并得到[0,1,2,6,7]
最终输出应为:
[ [Node[0], Node[1], Node[2], Node[6], Node[7]], [Node[3], Node[4], Node[5]] ]
我试着这样:
for (Set<Node> s1 : NestedSet ) {
Optional<Set<Node>> findFirst = result.stream().filter(p -> { HashSet<Node> temp = new HashSet<>(s1);
temp.retainAll(p);
return temp.size() == 2; }).findFirst();
if (findFirst.isPresent()){
findFirst.get().addAll(s1);
}
else {
result.add(s1);
}
}
但我得到的结果是:
[[Node[0], Node[1], Node[2], Node[6], Node[7]], [Node[3], Node[4], Node[5]], [Node[0], Node[2], Node[6], Node[7]]]
知道吗?有没有办法得到想要的输出
# 1 楼答案
一些考虑:
LinkedHashSet
(而不是HashSet
)或List
)李>以下代码满足您的要求:
为了测试这个方法,我创建了两个助手方法:
这些助手方法允许编写非常可读的测试,例如(使用问题中的数字):