我有一项任务是从集合中移除任何集合,该集合包含在其他集合中:
private static Set<Set<String>> foldSets(Set<Set<String>> sets) {
OUTER:
while (true) {
for (Set<String> s1 : sets) {
Set<Set<String>> toRemove = new HashSet<>();
for (Set<String> s2 : sets) {
if (s1.size() > s2.size() && s1.containsAll(s2)) {
toRemove.add(s2);
}
}
if (!toRemove.isEmpty()) {
sets.removeAll(toRemove);
continue OUTER;
}
}
return sets;
}
}
OUTER 循环变得无限,而常识告诉我在任何情况下都不可能。这是因为 removeAll 方法不会从集合中删除任何内容。
这个谜语让我发疯。请帮助解决。
答案 0 :(得分:1)
这可能是一个许可问题。
如果你覆盖了它,那么无论如何都会看到你的“removeAll”方法。您正试图删除文件夹,对吗?
如果你无法解决它,我有一个工作代码,以递归方式删除其中的文件夹和文件。
Here就是样本。
如果你没有删除文件夹,它只是一个字符串的东西调试它并告诉我们哪一步根本不起作用。
答案 1 :(得分:0)
<强>解决!强>
这是一个哈希问题。添加后,添加到集的集已被修改。这使得它们对 removeAll 方法不可见,它依赖于 hash 来查找项目。
尽管如此,还是一个谜语。