Помогите плиз сбросить итератор в листе
Суть такова. Я хочу написать методы, при вызове которого будет возвращаться элемент листа. А после последнего элемента вернется первый, потом второй. То есть цикл и в обратном направлении. С методом next() вроде все понятно. А вот с prev() уже сложнее. В метод prev() итератор приходить на нулевом элементе. Я его пытаюсь поставить на последний. Но он не совсем корректно работает.
вот что я смог накодить.
T next() {
while (true) {
if (listIterator.hasNext()) {
return listIterator.next();
} else {
listIterator = list.listIterator();
}
}
}
T prev() {
if (!listIterator.hasPrevious()) {
for (int i = 0; i < list.size(); i++) {
listIterator.next();
}
}
while (true) {
if (listIterator.hasPrevious()) {
return listIterator.previous();
}
}
}
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Метод List.listIterator(int) устанавливает итератор на указанную позицию. В случае метода previous его следует установить после последнего элемента списка.
Если поправить остальные ошибки, то в вашей нотации методы могут выглядеть так:
@Override
public T next() {
if (!listIterator.hasNext()) {
listIterator = list.listIterator();
}
return listIterator.next();
}
@Override
public T previous() {
if (!listIterator.hasPrevious()) {
listIterator = list.listIterator(list.size());
}
return listIterator.previous();
}