IllegalStateException в iterator.remove () и вызов iterator.next () в аргументе mehod - PullRequest
0 голосов
/ 17 января 2019

Почему я получаю IllegalStateException в iterator.remove(), если я звонил iterator.next() до этого?

Есть ли какая-либо возможная причина для этого? iterator.next() метод был вызван ранее, а iterator.remove() не был вызван дважды. Я не могу думать ни о какой другой причине для IllegalStateException. Этот код выполняется в рабочем потоке SimpleThreadPool Quartz Timer (все в моем веб-приложении, работающем на Tomcat7), но это не имеет значения?

Пожалуйста, смотрите смело прокомментированные части кода ниже для упрощения описания проблемы (это из реального проекта).

    public Set<Draw5x36> shortListByFiveDistancePattern(Set<Draw5x36> candidatesToShortlist,
            int DEPTH_TO_CHECK_UNIQUENESS_OF_DISTANCE_PATTERN) {

        Set<Draw5x36> candidatesToShortlistCopy = new HashSet<>(candidatesToShortlist);
        FiveDistancePatternAnalyzer analyzer = new FiveDistancePatternAnalyzer(allDraws);

        // GET ITERATOR FROM A SET
        Iterator<Draw5x36> candidatesIterator = candidatesToShortlistCopy.iterator();
        // CHECK iterator.hasNext() WITHIN LOOP
        while (candidatesIterator.hasNext()) {
            // CALL iterator.next() - WITHIN METHOD ARGUMENT WITHIN IF CONDITION BELOW
            if (!analyzer.isFiveDistancesUniqInNLatestDrawsFromCandidate(candidatesIterator.next(),
                    DEPTH_TO_CHECK_UNIQUENESS_OF_DISTANCE_PATTERN)) {
                // GET IllegalStateException, BUT I CALLED iterator.next() above!
                candidatesIterator.remove();
            }
        }
        return candidatesToShortlistCopy;
    }

Аргумент метода должен быть оценен перед вызовом метода, и метод внутри условия if на 100% вызывается для оценки условия if, поэтому всегда вызывается iterator.next().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...