Iterables.findとIterators.find - 代わりに例外をスローするのは、getはnull
質問
私は、グーグル・コレクションを使用していない場合は満たす述語は、私に「ヌル」を返すことを最初の要素を検索しようとしています。
どの要素が見つからないとき残念なことに、Iterables.findとIterators.findははNoSuchElementExceptionをスローします。
今、私がやることを余儀なくしています。
Object found = null;
if ( Iterators.any( newIterator(...) , my_predicate )
{
found = Iterators.find( newIterator(...), my_predicate )
}
私は「のtry / catch」で囲むと同じことを行うが、私のユースケースのためにすることができ、私は何の要素が見つからない多くのケースに遭遇するつもりです。
これを行う簡単な方法はありますか?
解決
あなたはIterators.filterを使用しなければならないようですね、それから返されたイテレータ上のhasNextの値をチェックします。
他のヒント
グァバ7ので、デフォルトの値を取るIterables.find()オーバーロードを使用してこれを行うことができます:
Iterables.find(iterable, predicate, null);
私は確かに簡単、この適合する場合ないんだけど、少なくとも、それは例外を回避し、反復可能ソースの上に一つだけのパスを必要とします:
public static <T> T findMatchOrNull(Iterator<T> source, Predicate<T> pred) {
Iterator<T> matching = Iterators.filter(source, pred);
Iterator<T> padded = Iterators.concat(matching, Iterators.<T>singletonIterator(null));
return padded.next();
}
所属していません StackOverflow