从集合的ArrayList中删除重复项| ArrayList <set <string >> tmp

时间:2019-03-28 03:57:36

标签: java arraylist set

我有一组字符串的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 想要这个

3 个答案:

答案 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]]