Вы можете создать собственную реализацию интерфейса Iterator
, который выполняет итерацию по итераторам:
public class IteratorOfIterators implements Iterator {
private final List<Iterator> iterators;
public IteratorOfIterators(List<Iterator> iterators) {
this.iterators = iterators;
}
public IteratorOfIterators(Iterator... iterators) {
this.iterators = Arrays.asList(iterators);
}
public boolean hasNext() { /* implementation */ }
public Object next() { /* implementation */ }
public void remove() { /* implementation */ }
}
(для краткости я не добавил обобщений в итератор.) Реализация не слишком сложная, но не самая тривиальная, вам нужно отслеживать, на каком Iterator
вы сейчас выполняете итерацию, и, вызывая next()
, вам нужно будет выполнять итерацию настолько, насколько это возможно, с помощью итераторов.пока вы не найдете hasNext()
, который возвращает true
, или вы можете дойти до конца последнего итератора.
Я не знаю ни одной реализации, которая уже существует для этого.
Обновление: Я проголосовал за ответ Эндрю Даффи - нет необходимости заново изобретать колесо.Мне действительно нужно более детально изучить Guava.
Я добавил еще один конструктор для переменного числа аргументов - почти не в тему, поскольку то, как здесь создается класс, не представляет большого интереса, простопонятие о том, как это работает.