IObjectTest是具有单个布尔测试(对象o)方法的接口
FilteringIterator是Iterator的实现,该实现使用另一个Iterator和一个IObjectTest实例初始化:new FilteringIterator(myIterator,myTest)。然后,您的FilteringIterator将允许在“ myIterator”上进行迭代,但是会跳过所有未通过“ myTest”测试的对象。
由于“ hasNext”操作实际上涉及重复移动基础迭代器,直到到达下一个匹配项。问题是如何将迭代器移回去,因为hasNext不应移动基础迭代器。
您将需要使迭代器成为有状态的。缓存您从中检索到的最后一个值,hasNext并使用该next方法中的值(如果存在)。
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 }