如何在Java中实现Filtering Iterator?

时间:2017-03-14 22:18:58

标签: java iterator filtering

我创建了一个对象的数组(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,我无法创建这样的对象,因为它是一个界面?

1 个答案:

答案 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;
    }

}