2017-03-14 5 views
1

私はオブジェクトの配列(タブ[])を作成しましたが、フィルタリングしてフィールドの1つを使って印刷する必要があります(例:ob.a> 1ならば印刷します)。リストと述語インタフェースのすべてのエントリを通過するIteratorインタフェース、ArrayIteratorを作成しました。これは私のFilteringIteratorのコンストラクタです:私の「基本」イテレータを使用してすべてのエントリを表示しますフィルタイテレータをJavaで実装するには?

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

私も述語intefaceをを実装するクラスを持っている:

public interface Predicate 

{ 
     public boolean accept(Object ob); 
} 

FilteringIteratorを使用するにはどうすればよいですか?Predicateが必要な場合、そのようなオブジェクトを作成できません。

+0

'Predicate'を実装するクラスを作成し、クラスのインスタンスを作成します。 –

+0

[Javaでインタフェースを実装する方法](https://docs.oracle.com/javase/tutorial/java/IandI/usinginterface.html)を求めていますか? – shmosel

+1

[このFilteringIteratorを実装するには?](http://stackoverflow.com/q/5474893/5221149) – Andreas

答えて

1

クラスにnext()を実装したいと思うようなサウンドです。今、あなたはnext()を見ていること、同様hasNext()を実装するための簡単な運動でなければなりません

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

: それはのようなものでなければなりません!あなたは、たとえば、述語インタフェースを実装する必要があり述語を作成するために

class MyPredicate implements Predicate { 

    @Override 
    public boolean accept(Object ob){ 
     if (!ob instanceof Student) 
      return false; 

     Student student = (Student) ob; 
     return student.a > 1; 
    } 

} 
+1

hasNext()はどうでしょうか? – dnault

+1

@dnaultは実装するのがいいでしょうが、それは疑問の一部ではありません...次に、 'next'がどのように実装されているか見た後、' hasNext'に似たことをするのは難しくありません。 – alfasin

+0

Downvoter - コメントしますか? – alfasin

関連する問題