Answers:
不,这种方法在番石榴中不存在,实际上在我们的“理想墓地”中。
我们不认为“ null或null”是您真正想询问的关于集合的问题。
如果一个集合可能为null,并且应该将null视为空,则首先消除所有歧义,如下所示:
Set<Foo> foos = NaughtyClass.getFoos();
if (foos == null) {
foos = ImmutableSet.of();
}
或这样(如果您愿意):
Set<Foo> foos = MoreObjects.firstNonNull(
NaughtyClass.getFoos(), ImmutableSet.<Foo>of());
之后,您可以像平常一样使用.isEmpty()
。在调用顽皮的API时立即执行此操作,您已经将怪异现象抛在身后,而不是让它无限期地继续下去。
而且,如果“空值实际上意味着空集合”没有返回给您,而是传递给了您,那么您的工作就很容易:只要丢掉一个NullPointerException
,然后使调用者整形即可。
null
尽快标准化为空集合来消除歧义。如果不能,那么,您可能是真正要编写自己的琐碎isNullOrEmpty(Collection)帮助器的用户中,不到1%的人之一。
if (collection == null || collection.isEmpty())
在需要的情况下写!这太糟糕了吗?)
您可能会在整个番石榴中发现一件事,即它们往往对null
s 非常不利。作者希望阻止您null
尽可能多地使用它,并且提供实用的方法以使其更易于使用null
将适得其反。
如果要使用Guava的范例,请考虑该集合(或数组)的源是否真的应该有选择地返回null
。如果不是,请考虑对其进行标记,@NonNull
然后返回空集合而不是null
。或将其用作期望无null
值列表的函数的参数,请考虑使用Preconditions.checkNotNull
,如果null
(意外地)传入a,则会引发异常。
如果null
真的合法,list == null || list.isEmpty()
那就不难了。
commons-collections中有一个CollectionUtils.isEmpty()。
Spring Framework具有称为的专门util类CollectionUtils
。您正在寻找的方法是:org.springframework.util.CollectionUtils.isEmpty
。对于null和空集合,它返回true。
对于数组,有一种org.springframework.util.ObjectUtils.isEmpty
方法的行为几乎相同。
Apache CollectionUtils 4具有CollectionUtils.emptyIfNull()方法,如果该集合为null,则该方法返回一个空列表。这在foreach循环中非常有用,因此您不需要在进行迭代之前执行null检查
我的解决方案是:MoreObjects.firstNonNull(list,Collections。emptyList())
我正在使用带有JDK集合的Guava MoreObjects。
@Test
public void listnull() {
List<String> list = null;
for (String str : MoreObjects.firstNonNull(list, Collections.<String> emptyList())) {
System.out.println(str);
}
list = new ArrayList<String>();
list.add("http://stackoverflow.com/");
for (String str : MoreObjects.firstNonNull(list, Collections.<String> emptyList())) {
System.out.println(str);
}
}
查看Appache集合,如果collection为null或为空,则CollectionUtils.isEmpty()返回true