通常の Java イテレーターは、コレクションのすべての要素を繰り返すだけです。そのため、反復ごとに自分で値を確認する必要があります。
あなたが書いたことは、Apache Commons CollectionsFilterIterator
のクラスを使用して実行できます。
JavaDoc から:
このイテレータは、基になるイテレータを装飾し、指定された に一致する要素のみを許可しますPredicate
。
開始するための例を次に示します。
// Create a predicate class, like this:
class MyAwesomePredicate implements Predicate {
@Override
public boolean evaluate(Object object) {
// If the condition is satisfied, return true.
// Return false otherwise.
}
}
// and pass it to the FilterIterator:
Iterator<SomeClass> matchingObjects =
new FilterIterator(myCollection.iterator(), new MyAwesomePredicate());
// Now iterate the maching objects:
while (machingObjects.hasNext() {
// do your stuff
}
更新:Iterators#filter(Iterator<T>, Predicate<? super T>)
必要に応じて、 from Guavaもあります。Apache Commons とは異なり、ジェネリックがサポートされており、(ほぼ間違いなく)クールネス ファクターが高くなっています。