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