All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jillesvangurp.iterables.PeekableIterator Maven / Gradle / Ivy

package com.jillesvangurp.iterables;

import java.util.Iterator;

/**
 * Iterator that implements a peek method.
 *
 * @param 
 */
public class PeekableIterator implements Iterator {

    private final Iterator iterator;
    T buffered=null;

    public PeekableIterator(Iterator iterator) {
        this.iterator = iterator;
    }

    public PeekableIterator(Iterable iterable) {
        this.iterator = iterable.iterator();
    }

    @Override
    public boolean hasNext() {
        return iterator.hasNext() || buffered != null;
    }

    @Override
    public T next() {
        T result = buffered;
        if(result != null) {
            buffered=null;
            return result;
        } else {
            return iterator.next();
        }
    }

    @Override
    public void remove() {
        iterator.remove();
    }

    /**
     * Allows you to peek at the next element without moving the iterator forward. You can call peek as often as you want.
     * @return the next element without moving the iterator forward.
     */
    public T peek() {
        if(buffered != null) {
            return buffered;
        } else {
            buffered=next();
            return buffered;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy