• IObjectTest是具有
    单个 boolean 测试(对象o)方法
  • FilteringIterator是Iterator的实现,它是
    用另一个Iterator初始化
    和一个IObjectTest实例:new
    FilteringIterator(myIterator,
    myTest)。您的FilteringIterator将
    然后允许迭代结束
    'myIterator',但跳过任何
    不通过的对象
    “myTest”测试。

  • 由于“hasNext”操作实际上涉及重复移动基础迭代器
    直到到达下一个匹配项。问题是如何将迭代器移回原处,因为hasNext不应移动基础迭代器。

    最佳答案

    您将需要使迭代器成为有状态的。缓存您从hasNext检索到的最后一个值,并使用next方法(如果存在)使用它。

    private boolean hasCached;
    private T cached;
    
    public boolean hasNext() {
       if ( hasCached ) return true;
       //iterate until you find one and set hasCached and cached
    }
    
    public T next() {
       if ( hasCached ) {
          hasCached = false;
          return cached;
       }
       //iterate until next matches
    }
    

    关于java - 如何实现此FilteringIterator?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5474893/

    10-12 07:33