Просто используйте это:
for (Book b : toremove) {
int index = list.indexOf(b);
if (index != -1) list.remove(index);
}
Это найдет индекс вашего объекта, а затем удалит его, используя этот индекс, пока эта книга присутствует в list
.
Of Конечно, как сказал sc0der, вам придется переопределить метод equals для класса Book
, но я подозреваю, что вы уже это сделали, поскольку removeAll
действительно работает и удаляет все объекты.
Пример ввода:
list = new ArrayList<>();
list.add(book1);
list.add(book1);
list.add(book2);
list.add(book1);
list.add(book3);
toremove = Arrays.asList(new Book[]{book1, book2});
Пример вывода:
list = [book1, book1, book3]