import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; import java.util.PriorityQueue; import java.util.stream.Collectors; import org.apache.commons.collections4.iterators.PeekingIterator; class MegaIterator<T extends Comparable<T>> implements Iterator<T> { private PriorityQueue<PeekIter> queue = new PriorityQueue<>(); // Test MegaIterator<Integer> megaIter = new MegaIterator<>(iter1, iter2, iter3); while (megaIter.hasNext()) { } } public MegaIterator(Collection<Iterator<T>> iters) { List<PeekIter> itersList = iters.stream() .map(i -> new PeekIter(i)) .collect(Collectors.toList()); queue.addAll(itersList); } public MegaIterator(Iterator<T>... iters) { .map(i -> new PeekIter(i)) .collect(Collectors.toList()); queue.addAll(itersList); } @Override public boolean hasNext() { return queue.isEmpty() ? false : queue.peek().hasNext(); } @Override public T next() { if (queue.isEmpty() || !queue.peek().hasNext()) { } PeekIter nextIter = queue.poll(); T nextVal = nextIter.next(); if (nextIter.hasNext()) { queue.add(nextIter); } return nextVal; } private class PeekIter extends PeekingIterator<T> implements Comparable<PeekIter> { public PeekIter(Iterator<? extends T> iterator) { super(iterator); } @Override public int compareTo(PeekIter o) { return this.peek().compareTo(o.peek()); } } }
Standard input is empty
Main.java:8: error: package org.apache.commons.collections4.iterators does not exist
import org.apache.commons.collections4.iterators.PeekingIterator;
^
Main.java:56: error: cannot find symbol
private class PeekIter extends PeekingIterator<T> implements Comparable<PeekIter> {
^
symbol: class PeekingIterator
location: class MegaIterator<T>
where T is a type-variable:
T extends Comparable<T> declared in class MegaIterator
Main.java:40: error: cannot find symbol
return queue.isEmpty() ? false : queue.peek().hasNext();
^
symbol: method hasNext()
location: class MegaIterator<T>.PeekIter
where T is a type-variable:
T extends Comparable<T> declared in class MegaIterator
Main.java:45: error: cannot find symbol
if (queue.isEmpty() || !queue.peek().hasNext()) {
^
symbol: method hasNext()
location: class MegaIterator<T>.PeekIter
where T is a type-variable:
T extends Comparable<T> declared in class MegaIterator
Main.java:49: error: cannot find symbol
T nextVal = nextIter.next();
^
symbol: method next()
location: variable nextIter of type MegaIterator<T>.PeekIter
where T is a type-variable:
T extends Comparable<T> declared in class MegaIterator
Main.java:50: error: cannot find symbol
if (nextIter.hasNext()) {
^
symbol: method hasNext()
location: variable nextIter of type MegaIterator<T>.PeekIter
where T is a type-variable:
T extends Comparable<T> declared in class MegaIterator
Main.java:64: error: cannot find symbol
return this.peek().compareTo(o.peek());
^
symbol: method peek()
location: variable o of type MegaIterator<T>.PeekIter
where T is a type-variable:
T extends Comparable<T> declared in class MegaIterator
Main.java:64: error: cannot find symbol
return this.peek().compareTo(o.peek());
^
symbol: method peek()
Note: Main.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
8 errors
Standard output is empty