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();
*/