fork download
  1. import java.util.Arrays;
  2. import java.util.Collection;
  3. import java.util.Iterator;
  4. import java.util.List;
  5. import java.util.NoSuchElementException;
  6. import java.util.PriorityQueue;
  7. import java.util.stream.Collectors;
  8. import org.apache.commons.collections4.iterators.PeekingIterator;
  9.  
  10. class MegaIterator<T extends Comparable<T>> implements Iterator<T> {
  11. private PriorityQueue<PeekIter> queue = new PriorityQueue<>();
  12.  
  13. public static void main (String[] args) throws java.lang.Exception {
  14. // Test
  15. Iterator<Integer> iter1 = Arrays.asList(1, 5).iterator();
  16. Iterator<Integer> iter2 = Arrays.asList(2, 4).iterator();
  17. Iterator<Integer> iter3 = Arrays.asList(1, 2, 4, 5).iterator();
  18. MegaIterator<Integer> megaIter = new MegaIterator<>(iter1, iter2, iter3);
  19. while (megaIter.hasNext()) {
  20. System.out.println(megaIter.next());
  21. }
  22. }
  23.  
  24. public MegaIterator(Collection<Iterator<T>> iters) {
  25. List<PeekIter> itersList = iters.stream()
  26. .map(i -> new PeekIter(i))
  27. .collect(Collectors.toList());
  28. queue.addAll(itersList);
  29. }
  30.  
  31. public MegaIterator(Iterator<T>... iters) {
  32. List<PeekIter> itersList = Arrays.asList(iters).stream()
  33. .map(i -> new PeekIter(i))
  34. .collect(Collectors.toList());
  35. queue.addAll(itersList);
  36. }
  37.  
  38. @Override
  39. public boolean hasNext() {
  40. return queue.isEmpty() ? false : queue.peek().hasNext();
  41. }
  42.  
  43. @Override
  44. public T next() {
  45. if (queue.isEmpty() || !queue.peek().hasNext()) {
  46. }
  47. PeekIter nextIter = queue.poll();
  48. T nextVal = nextIter.next();
  49. if (nextIter.hasNext()) {
  50. queue.add(nextIter);
  51. }
  52. return nextVal;
  53. }
  54.  
  55. private class PeekIter extends PeekingIterator<T> implements Comparable<PeekIter> {
  56.  
  57. public PeekIter(Iterator<? extends T> iterator) {
  58. super(iterator);
  59. }
  60.  
  61. @Override
  62. public int compareTo(PeekIter o) {
  63. return this.peek().compareTo(o.peek());
  64. }
  65. }
  66. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
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
stdout
Standard output is empty