Я написал ADT Sorted BinaryTree с функцией:
public Iterator<T> getInorderIterator(){
return new InorderIterator();
}
, которая работает, проходит по дереву по порядку.
Затем у меня есть класс словаря, который использует этот класс дляхранить записи типа Entry<K, V>
и функцию, возвращающую Iterable всех записей.
public Iterable<Entry<K, V>> entries() {
//bST is BinarySortedTree
return () -> bST.getInorderIterator();
}
Все это работает так, как должно, но я хочу написать еще 2 функции, которые возвращают Iterable ключей и значений в словаре.Как бы я создал эти Iterables из Iterable, возвращенного из entries()
, или из вызова getInorderIterator()
на BinaryTree.
Класс записи:
public class Entry<K, V> {
public final K key;
public final V value;
public Entry(K key, V value) {
this.key = key;
this.value = value;
}
@Override
public boolean equals(Object o) {
if (o instanceof Entry) {
Entry other = (Entry)o;
return this.key.equals(other.key) && this.value.equals(other.value);
}
return false;
}
}
Я не могу написать итератор в классе BinaryTree, поскольку он использует абстрактные типы данных.