簡體   English   中英

如何在 Java 中實現過濾迭代器?

[英]How to implement Filtering Iterator in Java?

我創建了一個對象數組 (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); 
 }

如何使用我的 FilteringIterator,當它需要 Predicate 而我不能創建這樣的對象時,因為它是一個接口?

聽起來你想在FilteringIterator類中實現next() 它應該是這樣的:

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

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM