[英]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.