我创建了一个对象的数组(tab []),现在我需要通过其中一个字段进行过滤和打印(例如,打印如果ob.a> 1)。我创建了一个Iterator接口,ArrayIterator遍历列表和Predicate接口上的所有条目。这是我的FilteringIterator的构造函数:
private final Iterator iterf;
private final Predicate pred;
public FilteringIterator(ArrayIterator i, Predicate predykat)
{
iterf=i;
pred=predykat;
iterf.first();
}
使用我的“基本”迭代器打印每个条目的方法如下所示:
public void printlist()
{
ArrayIterator itab =new ArrayIterator(lista);
for(itab.first();!itab.isDone(); itab.next())
{
Student stud=(Student)itab.current();
stud.show();
}
}
我还有一个实现Predicate接口的类:
public interface Predicate
{
public boolean accept(Object ob);
}
当需要Predicate时,如何使用我的FilteringIterator,我无法创建这样的对象,因为它是一个界面?
答案 0 :(得分:2)
听起来您想在next()
课程中实施FilteringIterator
。
它应该是这样的:
public T next() {
T next = iterf.next();
while (!pred.accept(next))
next = iterf.next();
return next;
}
既然你看到了next()
,那么实施hasNext()
也应该是一个简单的练习!
为了创建谓词,您应该实现Predicate接口,例如:
class MyPredicate implements Predicate {
@Override
public boolean accept(Object ob){
if (!ob instanceof Student)
return false;
Student student = (Student) ob;
return student.a > 1;
}
}