package com.googlecode.totallylazy.collections; import com.googlecode.totallylazy.Option; import com.googlecode.totallylazy.Pair; import com.googlecode.totallylazy.iterators.StatefulIterator; import static com.googlecode.totallylazy.Option.some; import static com.googlecode.totallylazy.collections.TreeZipper.zipper; public class TreeIterator<K, V> extends StatefulIterator<Pair<K, V>> { private Option<TreeZipper<K, V>> zipper; public TreeIterator(TreeMap<K, V> treeMap) { this.zipper = some(zipper(treeMap).first()); } @Override protected Pair<K, V> getNext() throws Exception { if(zipper.isEmpty()) return finished(); Pair<K, V> pair = zipper.get().pair(); zipper = zipper.get().nextOption(); return pair; } }