Можно ли объединить итераторы в Java?

Можно ли объединить итераторы в Java? У меня есть два итератора, и я хочу объединить / объединить их, чтобы я мог перебирать их элементы за один раз (в одном цикле), а не за два шага. Это возможно?

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

Iterator<User> pUsers = userService.getPrimaryUsersInGroup(group.getId());
Iterator<User> sUsers = userService.getSecondaryUsersInGroup(group.getId());

while(pUsers.hasNext()) {
  User user = pUsers.next();
  .....
}

while(sUsers.hasNext()) {
  User user = sUsers.next();
  .....
}
44
задан Jahanzeb Farooq 31 August 2010 в 15:25
поделиться

3 ответа

переместите свой цикл в метод и передайте итератор в метод.

void methodX(Iterator x) {
    while (x.hasNext()) {
        ....
    }
}
3
ответ дан 26 November 2019 в 21:49
поделиться

Итератор исходит из коллекции или набора.
почему бы не использовать уже доступный метод
Collection.addAll(Collection c);
, а затем создайте свой итератор из последнего объекта.
таким образом, ваш итератор будет перебирать все содержимое обеих коллекций.

3
ответ дан 26 November 2019 в 21:49
поделиться

каждый объект Iterator содержит собственное место в памяти (адрес), так что вы не можете просто "объединить" их. за исключением случаев, когда вы расширяете класс iterator и пишете там свою собственную реализацию.

Если вы имеете дело с одинаковым числом объектов в обоих итераторах, альтернативным решением будет обработка двух итераторов в одном цикле следующим образом:

   while (iterator1.hasNext() && iterator2.hasNext()) {
      // code
    }
0
ответ дан 26 November 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: