#java #iterator
Вопрос:
Привет, я создаю EvenIterator
приложение, в котором он возвращает элементы с четными индексами, такими как:
public class EvenIterator implements java.util.Iterator<String> {
private Iterator<String> iter;
public EvenIterator(Iterable<String> iter) {
this.iter = iter.iterator();
createEvenListIterator();
}
private void createEvenListIterator() {
LinkedList<String> list = new LinkedList<String>();
while(iter.hasNext()) {
String value = iter.next();
if(value%2 == 0) {
list.add(value);
}
}
iter = list.iterator();
}
public boolean hasNext() {
return iter.hasNext();
}
public String next() {
if(iter.hasNext()) {
return iter.next();
} else
throw new NoSuchElementException();
}
public void remove() {
throw new UnsupportedOperationException();
}
}
и я получаю ошибку if(value%2 == 0)
(ошибка типа аргументации), есть ли в любом случае возможность исправить это или обойти это? Спасибо.
Комментарии:
1. Вы хотите сохранить элементы с четными индексами или элементы, которые являются четными значениями ?
2. Элементы с четными индексами
Ответ №1:
if(value%2 == 0)
проверяет, является ли значение четным, но вам нужно проверить, является ли индекс значения четным. Есть несколько способов сделать это, но один из них-добавить свой собственный счетчик в цикл.
private void createEvenListIterator() {
LinkedList<String> list = new LinkedList<String>();
int count = 0;
while(iter.hasNext()) {
String value = iter.next();
if(count % 2 == 0) {
list.add(value);
}
count ;
}
iter = list.iterator();
}
Другой способ, если вы можете переключиться на использование a ListIterator
, — позвонить nextIndex()
раньше iter.next()
и получить индекс напрямую.