Вы можете сделать это с помощью одного итератора, таким образом:
Iterator<PointAG> it = points.iterator();
if (it.hasNext()) {
PointAG prev = it.next();
while (it.hasNext()) {
PointAG next = it.next();
sections.add(new LineSection(prev, next));
prev = next;
}
}
Вы можете написать тело цикла без каких-либо дополнительных переменных:
while (it.hasNext()) {
sections.add(new LineSection(prev, prev = it.next()));
}
Используется гарантированный порядок вычисления Java слева направо, что означает, что первый prev
оценивается перед повторным назначением. Это может быть не лучшим подходом: побочные эффекты внутри выражений легко пропустить при чтении кода; используйте тот, который вам удобно читать.
Выполнение этого с помощью итератора будет более эффективным, чем индексирование для реализаций списков, отличных от RandomAccess
, например LinkedList
.