Я люблю Google Guava и использую его много, но есть один метод, который я всегда нахожу, что я пишу..
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
, возможно, чтобы различать поиск нулевого значения и не обнаруживать элемент, эта ситуация возникает только в том случае, если предикат, который вы используете,
public boolean apply(T t){
return t==null;
}
который, как представляется, не является обычным случаем.
Итак, почему дизайнеры guava решили использовать это поведение вместо того, чтобы просто возвращать null, если он не может его найти?
Вот javadoc для [Iterables.find()] [1]
[1]: http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Iterables.html#find(java.lang.Iterable, com.google.common.base.Predicate)