3 回答

TA贡献1853条经验 获得超18个赞
就像你从任何其他 ArrayList 中删除重复项一样...
例如:
tmp.stream().distinct().collect(Collectors.toList());
注意:这假设列表项实现了合适的方法。正如他们应该的那样。equals

TA贡献1824条经验 获得超8个赞
一种方法:
List<Set<String>> tmp = new ArrayList<>();
tmp.add(new HashSet<>(List.of("A", "B", "C")));
tmp.add(new HashSet<>(List.of("B", "A", "C")));
tmp.add(new HashSet<>(List.of("C", "D", "E")));
tmp.add(new HashSet<>(List.of("E", "C", "D")));
Iterator<Set<String>> it = tmp.iterator();
while (it.hasNext())
{
Set<String> currentSet = it.next();
for (Set<String> set : tmp)
{
if (currentSet != set
&& currentSet.containsAll(set)
&& currentSet.size() == set.size())
{
it.remove();
break;
}
}
}
System.out.println(set);
输出:
[[A, B, C], [C, D, E]]

TA贡献1816条经验 获得超6个赞
HashSet正在研究哈希算法,
因此,如果您有两组包含相同值的字符串,则该集合的哈希码将始终相同(因为字符串在java中具有特殊分配)。
所以你可以试试下面。
List<Set<String>> tmp = new ArrayList<Set<String>>();
tmp.add(new HashSet<>(Arrays.asList(new String[]{"A","B","C"})));
tmp.add(new HashSet<>(Arrays.asList(new String[]{"B","A","C"})));
tmp.add(new HashSet<>(Arrays.asList(new String[]{"C","D","E"})));
tmp.add(new HashSet<>(Arrays.asList(new String[]{"E","C","D"})));
List<Set<String>> list =new ArrayList<>();
for(Set<String> s: tmp){
if(!list.contains(s)){
list.add(s);
}
}
System.out.println(list);
结果会像
[[A, B, C], [C, D, E]]
添加回答
举报