Iterables.findとIterators.find - 代わりに例外をスローするのは、getはnull

StackOverflow https://stackoverflow.com/questions/2543052

  •  23-09-2019
  •  | 
  •  

質問

私は、グーグル・コレクションを使用していない場合は満たす述語は、私に「ヌル」を返すことを最初の要素を検索しようとしています。

どの要素が見つからないとき残念なことに、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);

これは、機能要求として提出されました

http://code.google.com/p /グアバ-ライブラリ/問題/詳細?ID = 217

私たちはそれで進行中、実際にされます。

私は確かに簡単、この適合する場合ないんだけど、少なくとも、それは例外を回避し、反復可能ソースの上に一つだけのパスを必要とします:

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();
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top