java - 迭代器的迭代器

标签 java iterator

我正在尝试创建一个迭代器的迭代器,支持Java中的任何类型。目的是迭代迭代器的对象。

但是我的类型不匹配,并且我不知道如何初始化我的实现。

我想到的第一个想法是让我的类实现 Iterator<Iterator<T>>但这不起作用,因为下一个方法将具有签名 public Iterator<T> next()这与我想做的不符。而不是返回 Iterator<T> ,我想返回类型 T .

所以我创建了另一个与 Iterator 接口(interface)非常相似的接口(interface):

  public interface MyIterator<T extends Iterator<T>> {

    public boolean hasNext();

    public T next();
}

我的迭代器采用类型 T,它是一个迭代器。这是我的实现(没有删除):

public class IteratorOfIterator<T extends Iterator<T>> implements MyIterator<T> {

private T[] iterators;

private T currentIterator;

private int currentIndex;

public IteratorOfIterator(T[] iterators){
    this.iterators = iterators;
    this.currentIndex = 0;
    this.currentIterator = iterators[currentIndex];
}

public boolean hasNext() {
    return currentIndex < iterators.length - 1 || currentIterator.hasNext();
}

public T next() {
    if(!this.currentIterator.hasNext()){
        currentIndex++;
        this.currentIterator = iterators[currentIndex];
    }
    return currentIterator.next();
}

如果我想测试我的迭代器,但类型不匹配,我该如何初始化它?这是我想做的一个例子:

String[] strings = {"peanut","butter","coco","foo","bar"};

Object[] iterators = {strings};

MyIterator<String> myIterator = new IteratorOfIterator<String>(iterators); // <-- in this line

错误提示:Bound mismatch: The type String is not a valid substitute for the bounded parameter <T extends Iterator<T>> of the type IteratorOfIterator<T> IteratorOfIterator.java

如何解决这个问题?非常感谢您的建议。

PS:我完全理解这个问题。例如,我知道 String 类型没有实现 MyIterator 接口(interface),因此这就是为什么它不是一个好的替代品。我的问题是我不知道怎么办

最佳答案

这行不通,

public interface MyIterator<T extends Iterator<T>>

这意味着 T必须是Iterator本身。

您不希望 T 被限制为特定类型,

public interface MyIterator<T>

但是您希望迭代器的类型为 Iterator<T>

public class IteratorOfIterator<T> implements Iterator<T> {

private Iterator<T>[] iterators;

private Iterator<T> currentIterator;

private int currentIndex;

public IteratorOfIterator(Iterator<T>[] iterators){
    this.iterators = iterators;
    this.currentIndex = 0;
    this.currentIterator = iterators[currentIndex];
}

这样你就可以使用Iterator而不是MyIterator再次。

关于java - 迭代器的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16297452/

相关文章:

python - 如何读取文件的第一行两次?

javascript - 如何映射异步生成器?

java - 添加到已排序的 `linkedList`

java - 为什么我们不能从 Spring 直接注入(inject) DATE?

java - Pdfbox 签名和保护,无需保存在文件系统中

java - 什么是 NullPointerException,我该如何解决?

for-loop - 如何循环特定(可变)次数?

c++ - 有没有一种标准方法来比较 C++ 中的两个范围?

Java/Grails - 如何从没有索引的列表中删除元素

Java:valueOf 与 copyValueOf