什么是在Java集合上进行null-safe的最佳contains
的方法?
换句话说 -
if (collection != null && collection.contains(x))
我希望 Apache commons-collections 有类似于 CollectionUtils.contains(collection, x)
的功能,如果集合为空就返回 false,就像 size()
一样把 null 视为空集合。
然而,看起来并没有这样的功能——我错过了吗?
什么是在Java集合上进行null-safe的最佳contains
的方法?
换句话说 -
if (collection != null && collection.contains(x))
我希望 Apache commons-collections 有类似于 CollectionUtils.contains(collection, x)
的功能,如果集合为空就返回 false,就像 size()
一样把 null 视为空集合。
然而,看起来并没有这样的功能——我错过了吗?
在这里,您应该使用空对象模式并使用空集合,而不是空集合。当然,也许这对于您的问题是适当的,但是如果没有更多的上下文,很难确定。换句话说,我认为您正在解决错误的问题--为什么收集
首先会是空的?
session.getAttribute
,因此可能从未设置过。因此,至少需要进行一个非空检查-但如果有多个这样的检查,是的,我可以只进行一次检查并替换为空集合。 - wrschneider像这样做:
CollectionUtils.emptyIfNull(collection).contains(x)
对于SetUtils
、MapUtils
、ListUtils
等,也有相应的版本。
这段代码比较长,因此我认为它主要在需要Lambda的单个表达式时非常有用。
collection != null && collection.contains(x)
的问题在哪里?简单且无外部依赖! - Abhinav Sarkarx
为空,则存在更大的问题。即使您已经检查了collection
不为空,但某些类型的集合(例如没有自己的Comparator
的TreeSet
)会导致collection.contains(null)
抛出NullPointerException
,而您真正希望它只是返回false
。我仍在寻找一种空安全的方法来执行collection.contains(x)
,而不需要显式捕获此异常。 - Dawood ibn Kareem