我有一组字符串的ArrayList; router.post("/updateNoteDetail", async (req, res) => {
let result= await db.note_detail.update(
{
id: req.body.id,
note_type: {$elemMatch:
{noteid:req.body.noteId}},req.body.listId,$elemMatch:{}}}
},
{$set: {note_type.$.list.$[j].detail: req.body.detail }},
{arrayFilters: [{j.id: req.body.listId}]});
res.send(result);
});
由于我的需要,我需要使用这种类型的数据结构。如何从中删除重复项?
例如,如何转换;
ArrayList<Set<String>> tmp
到
[[A, B, C], [B, A, C], [C, D, E], [E, C, D]]
我确实在这里经历了其他类似的答案,但是对于上面的示例[[A, B, C], [C, D, E]]
,它们将所有项目连接到一个列表中。
我 DONOT 想要这个
答案 0 :(得分:1)
与从其他ArrayList中删除重复项的方法相同...
例如:
tmp.stream().distinct().collect(Collectors.toList());
注意::这假设列表项实现了合适的equals
方法。如他们所愿。
答案 1 :(得分:0)
一种方法:
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]]
答案 2 :(得分:0)
HashSet正在研究哈希算法,
因此,如果您有两个包含相同值的 String Set,则该Set的哈希码将始终相同(因为String在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]]