Flatten 2D Vector

Implement an iterator to flatten a 2d vector.

For example, Given 2d vector =

[ [1,2], [3], [4,5,6] ]

By calling next repeatedly until hasNext returns false, the order of elements returned by next should be: [1,2,3,4,5,6].

Follow up: As an added challenge, try to code it using only iterators in C++ or iterators in Java.

Solution

public class Vector2D implements Iterator<Integer> {

    List<Integer> integers;
    Iterator<Integer> iterator;
    public Vector2D(List<List<Integer>> vec2d) {
        integers = vec2d.stream().flatMap(item->item.stream()).collect(Collectors.toList());
        iterator = integers.iterator();
    }

    @Override
    public Integer next() {
        return iterator.next();
    }

    @Override
    public boolean hasNext() {
        return iterator.hasNext();
    }
}

/**
 * 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 ""