Implement an iterator to flatten a 2d vector.

public class Vector2D implements Iterator<Integer> {
    private int rowID;
    private int colID;
    private List<List<Integer>> vec;

    public Vector2D(List<List<Integer>> vec2d) {
        vec = vec2d;
        rowID = 0;
        colID = 0;
    }

    @Override
    public Integer next() {
        int res = vec.get(rowID).get(colID);
        colID++;
        if(colID == vec.get(rowID).size()) {
            colID = 0;
            rowID++;
        }

        return res;
    }

    @Override
    public boolean hasNext() {
        if(vec == null)
            return false;

        while(rowID < vec.size() && (vec.get(rowID) == null || vec.get(rowID).size() == 0))
            rowID++;

        return rowID < vec.size();
    }
}

/**
 * Your Vector2D object will be instantiated and called as such:
 * Vector2D i = new Vector2D(vec2d);
 * while (i.hasNext()) v[f()] = i.next();
 */

results matching ""

    No results matching ""