284.peeking-iterator.java 873 B

1234567891011121314151617181920212223242526272829303132
  1. // Java Iterator interface reference:
  2. // https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html
  3. class PeekingIterator implements Iterator<Integer> {
  4. private Iterator<Integer> iter;
  5. private Integer peek;
  6. public PeekingIterator(Iterator<Integer> iterator) {
  7. // initialize any member here.
  8. this.iter = iterator;
  9. }
  10. // Returns the next element in the iteration without advancing the iterator.
  11. public Integer peek() {
  12. if (this.peek == null) this.peek = this.iter.next();
  13. return this.peek;
  14. }
  15. // hasNext() and next() should behave the same as in the Iterator interface.
  16. // Override them if needed.
  17. @Override
  18. public Integer next() {
  19. if (this.peek == null) return this.iter.next();
  20. Integer next = this.peek;
  21. this.peek = null;
  22. return next;
  23. }
  24. @Override
  25. public boolean hasNext() {
  26. return peek != null || this.iter.hasNext();
  27. }
  28. }