fork(1) download
  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.Collection;
  4. import java.util.Iterator;
  5. import java.util.List;
  6. import java.util.NoSuchElementException;
  7. import java.util.PriorityQueue;
  8.  
  9. class SuperIterator<T extends Comparable<T>> implements Iterator<T> {
  10.  
  11. private List<Iterator<T>> iters;
  12. private PriorityQueue<T> queue = new PriorityQueue<>();
  13.  
  14. public static void main (String[] args) throws java.lang.Exception {
  15. // Test
  16. Iterator<Integer> iter1 = Arrays.asList(1, 5).iterator();
  17. Iterator<Integer> iter2 = Arrays.asList(2, 4).iterator();
  18. Iterator<Integer> iter3 = Arrays.asList(1, 2, 4, 5).iterator();
  19.  
  20. SuperIterator<Integer> superIter = new SuperIterator<>(iter1, iter2, iter3);
  21. while (superIter.hasNext()) {
  22. System.out.println(superIter.next());
  23. }
  24. }
  25.  
  26. public SuperIterator(Collection<Iterator<T>> iters) {
  27. this.iters = new ArrayList<>(iters);
  28. }
  29.  
  30. public SuperIterator(Iterator<T>... iters) {
  31. this.iters = new ArrayList<>(Arrays.asList(iters));
  32. }
  33.  
  34. @Override
  35. public boolean hasNext() {
  36. return !(iters.isEmpty() && queue.isEmpty());
  37. }
  38.  
  39. @Override
  40. public T next() {
  41. iters.removeIf(i -> !i.hasNext());
  42. iters.forEach(i -> queue.add(i.next()));
  43. if (queue.isEmpty()) {
  44. }
  45. return queue.poll();
  46. }
  47. }
Success #stdin #stdout 0.14s 2184192KB
stdin
Standard input is empty
stdout
1
1
2
2
4
4
5
5