【问题标题】:Creating an Iterable with values from a different Iterator / Iterable使用来自不同 Iterator / Iterable 的值创建一个 Iterable
【发布时间】:2018-10-29 05:52:37
【问题描述】:

我写了一个 ADT Sorted BinaryTree 的函数:

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

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

然后我有一个字典类,它使用这个类来存储 Entry&lt;K, V&gt; 类型的条目,以及一个返回所有条目的 Iterable 的函数。

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

所有这些都像它应该的那样工作,但我想再写 2 个函数来返回字典中键和值的 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 类中编写迭代器,因为它使用抽象数据类型。

【问题讨论】:

    标签: java iterator iterable


    【解决方案1】:

    只要有标准库,你就可以做到

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

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

    Apache Collection Commons

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

    【讨论】:

      猜你喜欢
      • 2013-03-03
      • 2011-08-15
      • 1970-01-01
      • 2020-01-24
      • 2016-08-20
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      相关资源
      最近更新 更多