使用来自不同Iterator / Iterable的值创建Iterable

时间:2018-05-18 18:27:07

标签: java iterator iterable

我用函数编写了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();
}

所有这些工作都应该如此,但我想再编写两个函数来返回字典中的Iterable键和值。如何从entries()返回的Iterable或BinaryTree上的getInorderIterator()调用创建Iterables。

入门级:

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

1 个答案:

答案 0 :(得分:1)

只需使用标准库,即可

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

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

Apache Collection Commons

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