目前我正在尝试从列表中删除所有重复项。但是,根据我收集的内容,如果总金额可以被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份副本,我希望将它们全部删除,以免日后出现错误。
答案 0 :(得分:4)
您有多个选项,其中一个选项是使用Set
的实现,因为它本身就是强制唯一性的集合。另一个选项是创建一个新列表并使用lambdas来获取不同的元素,例如假设您只想将“recipes”列表中的唯一/不同元素复制到新列表“recipesUnique”,您可以这样做:
ArrayList<T> recipesUnique = new ArrayList<>();
recipes.stream().distinct().forEach(recipesUnique::add);
还有更多可能的解决方案,如果你问我,如果你有义务使用List,lambdas是最简单的,否则只需使用Set
。