java - 添加了比我需要的更多的文件
问题描述
添加到我的 ArrayList 似乎创建的元素比我预期的要多 - 添加第二个元素后,文件似乎被重复了。
public void addFileToList(File file) throws IOException {
if (myList.size() == 0) { //size of my Array
myList.add(file);
} else {
for (ListIterator<File> iterator = myList.listIterator(); iterator.hasNext();) {
if (!FileUtils.contentEquals(file, iterator.next())) {//filter files
iterator.add(file);//add 8 elements
}
}
}
}
主班
public class Main {
public static void main(String[] args) throws IOException {
Branch br = new Branch("master"); //create Class
File file1 = new File("/Users/pro/IdeaProjects/MyNewGit/1.txt"); //create Files
File file2 = new File("/Users/pro/IdeaProjects/MyNewGit/3.txt");
File file3 = new File("/Users/pro/IdeaProjects/MyNewGit/4.txt");
File file4 = new File("/Users/pro/IdeaProjects/MyNewGit/6.txt");
br.addFileToList(file1); //add Files
br.addFileToList(file2);
br.addFileToList(file3);
br.addFileToList(file4);
}
}
我添加了 4 个文件,但出现了 8 个文件: ArrayList 的内容
解决方案
您的逻辑完全错误:
假设您的列表已经包含文件 a、b 和 c。你用文件 d 调用你的方法。
看看你的循环:
for (ListIterator<File> iterator = myList.listIterator(); iterator.hasNext(); ) {
if (!FileUtils.contentEquals(file, iterator.next())) {//filter files
iterator.add(file);//add 8 elements
}
}
它测试a是否与d不同。是的,所以你加了 d。然后它检查 b 是否与 d 不同。是的,所以你再次添加 d 。然后它检查 c 是否与 d 不同。是的,所以它又加了 d。
您需要测试是否所有文件都与 d 不同。在循环之后,当您知道答案时,您可以添加新文件。
推荐阅读
- emacs - 从 org-mode 文档控制 Latex 导出中源块结果的字体和大小
- mysql - 在github操作中执行phpunit时mysqldump滥用shell内置错误
- java - 使用@RequiredArgsConstructor Lombok 的父类的子类在父类中找不到默认构造函数
- javascript - 这个斐波那契函数的执行流程如何
- python - 在 X 轴上从第一个点到指定距离的线上查找一个点
- java - 如何仅在 recyclerview 中显示具有特定值的数据
- javascript - Gatsby Config 在 Javascript 文件中给出错误??操作员
- c# - 是否可以在 C# 中杀死(而不是取消)一个 backgroundWorker?
- python - Python Lambda 函数参数无效
- entity-framework - 在 LINQ 中使用参考号获取所有记录