有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在Java中实现过滤迭代器?

我已经创建了一个对象数组(tab[]),现在我需要通过它们的一个字段进行过滤和打印(例如,如果ob.a>;1,则打印)。我创建了一个迭代器接口ArrayIterator,它遍历列表和谓词接口上的所有条目。这是我的FilterGitterator的构造函数:

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();
    }
}

我还有一个实现谓词接口的类:

public interface Predicate

 {
      public boolean accept(Object ob); 
 }

当我的FilterGitter需要谓词,而我不能创建这样的对象,因为它是一个接口时,如何使用它


共 (1) 个答案

  1. # 1 楼答案

    听起来你想在FilteringIterator类中实现next()。 应该是这样的:

    public T next() {
        T next = iterf.next();
        while (!pred.accept(next))
            next = iterf.next();
        return next;
    }
    

    现在您看到了next(),实现hasNext()也应该是一个简单的练习

    为了创建谓词,您应该实现谓词接口,例如:

    class MyPredicate implements Predicate {
    
        @Override
        public boolean accept(Object ob){
            if (!ob instanceof Student)
                return false;
    
            Student student = (Student) ob;
            return student.a > 1;
        }
    
    }