使用来自不同迭代器/可迭代对象的值创建可迭代对象



我用以下函数编写了一个 ADT 排序二进制树:

public Iterator<T> getInorderIterator(){
return new InorderIterator();
}

哪个有效,按顺序遍历树。

然后我有一个字典类,它使用这个类来存储Entry<K, V>类型的条目,以及一个返回所有条目的可迭代的函数。

public Iterable<Entry<K, V>> entries() {
//bST is BinarySortedTree
return () -> bST.getInorderIterator();
}

所有这些都像它应该的那样工作,但我想再写 2 个函数来返回字典中键和值的可迭代对象。 我将如何从从entries()返回的可迭代对象或从二进制树上调用getInorderIterator()创建这些可迭代对象。

入门级:

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 类中编写迭代器,因为它使用抽象数据类型。

只需使用标准库,您就可以

StreamSupport.stream(entries().spliterator(), false).map(entry -> entry.value).iterator()

值(键的明显变化(。我不知道Java 9或10是否有更简单的方法。

与Apache Collection Commons

IteratorUtils.transformedIterator(bST.getInorderIterator(), entry -> entry.value)

最新更新