Нужна помощь, чтобы пройти через Java-итератор - PullRequest
1 голос
/ 12 февраля 2011

Скажем, я уже создал итератор с именем "iter" и массив с именем "database".Я хочу, чтобы я мог просматривать список и видеть, равен ли какой-либо элемент в списке элементов строке, называемой «тест».Если это так, то я хотел бы добавить элемент в другой список.

while(iter.hasNext()) {
    if(database.next() == test) { 
        database.next().add(another_list);
    }
}

Что я делаю не так?Я совершенно новый для итераторов в Java.Нужно ли мне писать свой собственный класс итераторов?Любые примеры кода будут с благодарностью.Спасибо

Ответы [ 2 ]

2 голосов
/ 12 февраля 2011

Проблема с вашим кодом в том, что каждый раз, когда вы вызываете .next(), он перемещает итератор вперед на следующую позицию.Это означает, что этот код

if(database.next() == test) { 
    database.next().add(another_list);
}

не будет работать должным образом, поскольку первый вызов database.next() не вернет то же значение, что и второй вызов database.next().Чтобы исправить это, вам нужно создать временную переменную, которая будет содержать новое значение, как показано здесь:

while(iter.hasNext()) {
    /* type */ curr = iter.next();
    if(curr == test) { 
        curr.add(another_list);
    }
}

(Заполнение реального типа того, что перебирается вместо /* type */)

Однако во многих случаях вам не нужно явно использовать итераторы.Большинство типов коллекций реализуют интерфейс Iterable, и в этом случае вы можете просто написать

/* container */ c;
for(/* type */ curr: c) {
    if(curr == test) { 
        curr.add(another_list);
    }
}

Надеюсь, это поможет!

2 голосов
/ 12 февраля 2011
if(database.contains("test"))
{
   another_list.add("test");
}
  1. вы можете использовать встроенный метод содержит (...)
  2. вы должны использовать равные (...) для сравнения данных
  3. посмотрите на javadoc , чтобы увидеть, есть ли уже метод для вашей цели
...