我喜欢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
的方法的意义,可能是为了区分查找null和找不到元素,但这种情况只有在您使用的谓词是
public boolean apply(T t){
return t==null;
}
这似乎不是一个常见的情况。
那么为什么guava设计者选择使用这种行为,而不是在找不到的情况下只返回null呢?
下面是Iterables.find()的javadoc
发布于 2010-06-23 14:13:54
我们正在添加另一个find()重载,它接受一个默认值。
发布于 2010-06-23 13:52:31
可能是因为null是一个有效的返回值。一般来说,除非有充分的理由不支持null,否则应该支持null。如果它被支持,那么你必须处理它存在的情况。
发布于 2010-06-23 14:03:08
您可以使用filter来代替tryFind(),并检查它是否返回一个空集合。
我发现总是使用集合比直接询问对象更干净。
https://stackoverflow.com/questions/3099188
复制相似问题