私はGoogleGuavaが大好きで、それをよく使用していますが、私がいつも書いている方法が1つあります。
public static <T> T tryFind(Iterable<T> iterable, Predicate<T> predicate){
for(T t : iterable){
if(predicate.apply(t)){
return t;
}
}
return null;
}
私にとって、これはIterables
(Iterators
そのことに関しても)非常に便利な追加であるように思われるので、なぜそれが欠落しているのか疑問に思います。NoSuchElementException
また、おそらくnullを見つけることと要素を見つけないことを区別するために、をスローするメソッドを持つことのポイントを理解できますが、その状況は、使用している述語が次の場合にのみ発生します。
public boolean apply(T t){
return t==null;
}
これは一般的なケースではないようです。
では、なぜguavaの設計者は、それが見つからない場合にnullを返すのではなく、この動作を選択したのでしょうか。
これが[Iterables.find()][1]のjavadocです。
[1]: http: //google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Iterables.html#find (java.lang.Iterable、com.google.common.base。述語)