一尘不染

如何实现此FilteringIterator?

java

  1. IObjectTest是具有单个布尔测试(对象o)方法的接口

  2. FilteringIterator是Iterator的实现,该实现使用另一个Iterator和一个IObjectTest实例初始化:new FilteringIterator(myIterator,myTest)。然后,您的FilteringIterator将允许在“ myIterator”上进行迭代,但是会跳过所有未通过“ myTest”测试的对象。

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


阅读 188

收藏
2020-12-03

共1个答案

一尘不染

您将需要使迭代器成为有状态的。缓存您从中检索到的最后一个值,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
}
2020-12-03