Итератор принимает строку, но мне нужно получить элементы с четными индексами?

#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() и получить индекс напрямую.