繁体   English   中英

Google Guava isNullOrEmpty用于收藏

[英]Google Guava isNullOrEmpty for collections

我看到Guava有针对字符串的isNullOrEmpty实用方法

Strings.isNullOrEmpty(str)

我们对列表有什么相似之处吗? 就像是

Lists.isNullOrEmpty(list)

这相当于

list == null || list.isEmpty()

另外,我们对阵列有什么相似之处吗? 就像是

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()使用.isEmpty() 在调用淘气的API时立即执行此操作,并且您已经将这种奇怪的东西放在身后,而不是让它无限期地继续下去。

如果“null真正意味着空集合”没有被返回给你,而是传递给你,那么你的工作很简单:只需抛出一个NullPointerException ,然后让调用者变形。

在整个番石榴中你会发现的一件事就是它们往往对于null的东西非常敌对。 作者希望阻止你尽可能多地使用null ,并且提供实用程序方法以使其更容易使用null将会对此产生反作用。

如果你想使用Guava的范例,请考虑这个集合(或数组)的源是否真的应该返回null 如果没有,请考虑将其标记为@NonNull并返回空集合而不是null 或者作为期望没有null值列表的函数的参数,请考虑使用Preconditions.checkNotNull ,如果(意外地)传入null ,则抛出异常。

如果null确实合法,则list == null || list.isEmpty() list == null || list.isEmpty()并不难。

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

Spring Framework有一个名为CollectionUtils专用util类。 您正在寻找的方法是: org.springframework.util.CollectionUtils.isEmpty 对于null和空集合,它返回true。

对于数组,有org.springframework.util.ObjectUtils.isEmpty方法,它的行为非常相似。

Apache CollectionUtils 4有一个方法CollectionUtils.emptyIfNull() ,如果集合为null,则返回一个空列表。 这在foreach循环中非常有用,因此在迭代之前不需要进行空检查

我的解决方案是:MoreObjects.firstNonNull(list,Collections.wallList())

我正在使用Guava MoreObjects和JDK Collections。

 @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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM