Ваша логика просто неверна:
Допустим, ваш список уже содержит файлы 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. И после цикла, когда вы знаете ответ, вы можете добавить новый файл.