Java 8: Как обновить данные в связанном списке, где мне нужно вытащить данные предыдущего узла, чтобы обновить данные текущего узла - PullRequest
0 голосов
/ 03 мая 2020

В данный момент я застрял в java двусвязном списке. Мне нужно обновить данные текущего узла, основываясь на значении предыдущего. Если я попытаюсь сделать так, это приведет к бесконечному l oop:

 ListIterator<SegmentDTO> taskListIterator = segmentDTOLinkedList.listIterator(dataPosition);
            while (taskListIterator.hasNext())
            {
                SegmentDTO existingSegment = taskListIterator.next();
                existingSegment.setSequenceId(existingSegment.getSequenceId() + 1);

                if (taskListIterator.hasPrevious())
                {
                    SegmentDTO previousSegment = taskListIterator.previous();
                    LocalDateTime projectedStartDttm = existingSegment.getProjectedStartDttm();
                    LocalDateTime projectedEndDttm = existingSegment.getProjectedEndDttm();

                    long originalDifference = Duration.between(projectedStartDttm, projectedEndDttm).toHours();
                    LocalDateTime projectedEndDateTimeAfterNewStop = previousSegment.getProjectedEndDttm()
                            .plusHours(originalDifference);

                    existingSegment.setProjectedStartDttm(previousSegment.getProjectedEndDttm());
                    existingSegment.setProjectedEndDttm(projectedEndDateTimeAfterNewStop);
                }
            }

моя функция hasNext () не выйдет, пока l oop. Это значение сбрасывается к предыдущему, когда я пытаюсь получить доступ к предыдущим данным.

Хотя l oop завершается только в том случае, если я удаляю вызов функции previous (), но мне нужны данные для обновления текущей записи на основе предыдущей. Пожалуйста, помогите.

1 Ответ

3 голосов
/ 04 мая 2020

Код движется вперед и затем снова через ListIterator каждый раз, когда выполняется l oop. Позвоните taskListIterator.next() в своем операторе if после того, как вы позвоните taskListIterator.previous(), чтобы переместить его назад.

...