NoSuchElementException в цикле фильтра

Пишу тестовое задание, представляющее из себя простой сервис заметок. Это мое первое знакомство с такого рода приложениями.

Сначала хоть как-то работало, но после того, как начал разбираться перестало работать при любом заданном фильтре. Кидает ошибку NoSuchElementException. Дебаггер показывает, что это происходит на третьем заходе в цикл.

Iterable<Entry> entries = entryRepo.findAll();
    if (filter != null && !filter.isEmpty()) {
        Iterator<Entry> itr = entries.iterator();
        while (itr.hasNext()){
            boolean first = !itr.next().getTitle().contains(filter);
            boolean second = !itr.next().getContent().contains(filter);
                if (first && second) {
                    itr.remove();
                }
        }
    }

Как исправить? Или подскажите вариант получше


Ответы (1 шт):

Автор решения: gil9red

Проверка itr.hasNext() у вас на следующий элемент (т.е. для first), а внутри вы два раза запрашиваете элементы (itr.next()), т.е. думаю на втором next элементов больше нет.

Как вариант, добавьте отлов того исключения, например так:

Iterable<Entry> entries = entryRepo.findAll();
if (filter != null && !filter.isEmpty()) {
    Iterator<Entry> itr = entries.iterator();
    while (true) {
        try {
            boolean first = !itr.next().getTitle().contains(filter);
            boolean second = !itr.next().getContent().contains(filter);
            if (first && second) {
                itr.remove();
            }
        
        } catch (NoSuchElementException) {
            break;
        }
    }
}
→ Ссылка