private void search(File currentDirectory) { FileTreeIterator iter = new FileTreeIterator(currentDirectory); while (iter.hasNext()) { File file = iter.next(); boolean accept = fileFilter.accept(file); synchronized (FileList.this) { if (searchID == searchCounter.get()) { if (accept) { int i = searchConstraints == null ? Collections.binarySearch(fileList, file) : Collections.binarySearch(fileList, file, searchConstraints); if (i >= 0) { // already exists? great } else { fileList.add(-i - 1, file); } } } else { return; } } } }