如何从列表中删除所有重复项

时间:2017-12-02 01:34:51

标签: java list minecraft bukkit

目前我正在尝试从列表中删除所有重复项。但是,根据我收集的内容,如果总金额可以被2整除,则只会删除它们。我如何编辑它以便获得所有副本,如果是3或5或更多?

    if(check.size() < recipes.size()) { //check is a set, checking for copies.
        logger.warning("We found a copy of names, please change them! We will be disabling those recipes to disable errors.");
        for(int i = 0; i < recipes.size(); i++) {
            for(int j = 0; j < recipes.size(); j++) {
                if(recipes.get(i) == recipes.get(j) && i != j) {
                    logger.warning("We found copies of " + recipes.get(i));
                    recipes.remove(i);
                    recipes.remove(j);
                }
            }
        }
    }

目前它只会从列表中删除2个值。

此外,如果有副本,我不想要剩下1份副本,我希望将它们全部删除,以免日后出现错误。

1 个答案:

答案 0 :(得分:4)

您有多个选项,其中一个选项是使用Set的实现,因为它本身就是强制唯一性的集合。另一个选项是创建一个新列表并使用lambdas来获取不同的元素,例如假设您只想将“recipes”列表中的唯一/不同元素复制到新列表“recipesUnique”,您可以这样做:

ArrayList<T> recipesUnique = new ArrayList<>();
recipes.stream().distinct().forEach(recipesUnique::add);

还有更多可能的解决方案,如果你问我,如果你有义务使用List,lambdas是最简单的,否则只需使用Set