Is it possible to merge iterators in Java?

后端 未结 14 1633
自闭症患者
自闭症患者 2020-11-30 08:14

Is it possible to merge iterators in Java? I have two iterators and I want to combine/merge them so that I could iterate though their elements in one go (in same loop) rathe

相关标签:
14条回答
  • 2020-11-30 09:12

    Also the Apache Commons Collection have several classes for manipulating Iterators, like the IteratorChain, that wraps a number of Iterators.

    0 讨论(0)
  • 2020-11-30 09:16

    You can use my version of an extendable iterator. It uses a double-ended queue of iterators which to me makes sense:

    import java.util.Deque;
    import java.util.Iterator;
    import java.util.concurrent.ConcurrentLinkedDeque;
    
    public class ExtendableIterator<T> implements Iterator<T> {
    
        public Deque<Iterator<T>> its = new ConcurrentLinkedDeque<Iterator<T>>();
    
        public ExtendableIterator() {
    
        }
    
        public ExtendableIterator(Iterator<T> it) {
            this();
            this.extend(it);
        }
    
        @Override
        public boolean hasNext() {
            // this is true since we never hold empty iterators
            return !its.isEmpty() && its.peekLast().hasNext();
        }
    
        @Override
        public T next() {
            T next = its.peekFirst().next();
            if (!its.peekFirst().hasNext()) {
                its.removeFirst();
            }
            return next;
        }
    
        public void extend(Iterator<T> it) {
            if (it.hasNext()) {
                its.addLast(it);
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题