import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.PriorityQueue;
class SuperIterator<T extends Comparable<T>> implements Iterator<T> {
private List<Iterator<T>> iters;
private PriorityQueue<T> queue = new PriorityQueue<>();
// Test
Iterator
<Integer
> iter1
= Arrays.
asList(1,
5).
iterator(); Iterator
<Integer
> iter2
= Arrays.
asList(2,
4).
iterator(); Iterator
<Integer
> iter3
= Arrays.
asList(1,
2,
4,
5).
iterator();
SuperIterator<Integer> superIter = new SuperIterator<>(iter1, iter2, iter3);
while (superIter.hasNext()) {
System.
out.
println(superIter.
next()); }
}
public SuperIterator(Collection<Iterator<T>> iters) {
this.iters = new ArrayList<>(iters);
}
public SuperIterator(Iterator<T>... iters) {
this.
iters = new ArrayList
<>(Arrays.
asList(iters
)); }
@Override
public boolean hasNext() {
return !(iters.isEmpty() && queue.isEmpty());
}
@Override
public T next() {
iters.removeIf(i -> !i.hasNext());
iters.forEach(i -> queue.add(i.next()));
if (queue.isEmpty()) {
}
return queue.poll();
}
}
aW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwppbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CmltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKaW1wb3J0IGphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uOwppbXBvcnQgamF2YS51dGlsLlByaW9yaXR5UXVldWU7CgpjbGFzcyBTdXBlckl0ZXJhdG9yPFQgZXh0ZW5kcyBDb21wYXJhYmxlPFQ+PiBpbXBsZW1lbnRzIEl0ZXJhdG9yPFQ+IHsKICAgIAogICAgcHJpdmF0ZSBMaXN0PEl0ZXJhdG9yPFQ+PiBpdGVyczsKICAgIHByaXZhdGUgUHJpb3JpdHlRdWV1ZTxUPiBxdWV1ZSA9IG5ldyBQcmlvcml0eVF1ZXVlPD4oKTsKICAgIAogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uIHsKICAgIAkvLyBUZXN0CiAgICAgICAgSXRlcmF0b3I8SW50ZWdlcj4gaXRlcjEgPSBBcnJheXMuYXNMaXN0KDEsIDUpLml0ZXJhdG9yKCk7CiAgICAgICAgSXRlcmF0b3I8SW50ZWdlcj4gaXRlcjIgPSBBcnJheXMuYXNMaXN0KDIsIDQpLml0ZXJhdG9yKCk7CiAgICAgICAgSXRlcmF0b3I8SW50ZWdlcj4gaXRlcjMgPSBBcnJheXMuYXNMaXN0KDEsIDIsIDQsIDUpLml0ZXJhdG9yKCk7CiAgICAgICAgCiAgICAgICAgU3VwZXJJdGVyYXRvcjxJbnRlZ2VyPiBzdXBlckl0ZXIgPSBuZXcgU3VwZXJJdGVyYXRvcjw+KGl0ZXIxLCBpdGVyMiwgaXRlcjMpOwogICAgICAgIHdoaWxlIChzdXBlckl0ZXIuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzdXBlckl0ZXIubmV4dCgpKTsKICAgICAgICB9CiAgICB9CiAKICAgIHB1YmxpYyBTdXBlckl0ZXJhdG9yKENvbGxlY3Rpb248SXRlcmF0b3I8VD4+IGl0ZXJzKSB7CiAgICAgIHRoaXMuaXRlcnMgPSBuZXcgQXJyYXlMaXN0PD4oaXRlcnMpOwogICAgfQogICAgCiAgICBwdWJsaWMgU3VwZXJJdGVyYXRvcihJdGVyYXRvcjxUPi4uLiBpdGVycykgewogICAgICB0aGlzLml0ZXJzID0gbmV3IEFycmF5TGlzdDw+KEFycmF5cy5hc0xpc3QoaXRlcnMpKTsKICAgIH0KCiAgICBAT3ZlcnJpZGUKICAgIHB1YmxpYyBib29sZWFuIGhhc05leHQoKSB7CiAgICAgICAgcmV0dXJuICEoaXRlcnMuaXNFbXB0eSgpICYmIHF1ZXVlLmlzRW1wdHkoKSk7ICAgICAKICAgIH0KCiAgICBAT3ZlcnJpZGUKICAgIHB1YmxpYyBUIG5leHQoKSB7CiAgICAgICAgaXRlcnMucmVtb3ZlSWYoaSAtPiAhaS5oYXNOZXh0KCkpOwogICAgICAgIGl0ZXJzLmZvckVhY2goaSAtPiBxdWV1ZS5hZGQoaS5uZXh0KCkpKTsKICAgICAgICBpZiAocXVldWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBxdWV1ZS5wb2xsKCk7CiAgICB9ICAKfQ==