Google Guava对于collections品来说是零或空的

我看到Guava为Strings提供了一个空或者空的实用方法

Strings.isNullOrEmpty(str) 

我们有什么类似的列表? 就像是

 Lists.isNullOrEmpty(list) 

这应该相当于

 list == null || list.isEmpty() 

另外,我们有什么类似的arrays? 就像是

 Arrays.isNullOrEmpty(arr) 

这应该相当于

 arr == null || arr.length == 0 

不,这种方法在番石榴中不存在,实际上是在我们的“想法墓地”。

我们不相信“无效或无效”是一个你真的想问一个集合的问题。

如果一个集合可能为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那样使用null ,并且提供使用null实用方法将会适得其反。

如果你想使用番石榴的范例,考虑这个集合(或数组)的来源是否真的应该可选地返回null 。 如果不是,请考虑将其标记为@NonNull并返回空集合而不是null 。 或者作为期望没有null值列表的函数的参数,可以考虑使用Preconditions.checkNotNull ,如果传入一个null值(意外),这会引发exception。

如果null真的是合法的, list == null || list.isEmpty() list == null || list.isEmpty()并不难。

commons-collections中有一个CollectionUtils.isEmpty() 。

Spring框架有专门的util类叫做CollectionUtils 。 而你正在寻找的方法是: org.springframework.util.CollectionUtils.isEmpty 。 它为null和空集合返回true。

对于数组, org.springframework.util.ObjectUtils.isEmpty方法的行为相同。

Apache CollectionUtils 4有一个方法CollectionUtils.emptyIfNull() ,如果集合为空,它将返回一个空列表。 这在foreach循环中非常有用,所以在迭代之前你不需要做一个空的检查

我的解决scheme是: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集合CollectionUtils.isEmpty()如果​​集合为null或为空,则返回true