清理番石榴方式来处理可能为空的集合

时间:2013-07-03 17:11:36

标签: java guava

我有一个方法,它接受一个参数Collection<Foo> foos,它可能是NULL。我想以ImmutableSet结尾输入本地副本。现在我的代码看起来像这样:

if (foos == null)
{
  this.foos = ImmutableSet.of();
}
else
{
  this.foos = ImmutableSet.copyOf(foos);
}

有更清洁的方法吗?如果foos是一个简单的参数,我可以执行类似Objects.firstNonNull(foos, Optional.of())的操作,但我不确定是否有类似处理集合的内容。

2 个答案:

答案 0 :(得分:13)

我不明白为什么你不能使用Objects.firstNonNull

this.foos = ImmutableSet.copyOf(Objects.firstNonNull(foos, ImmutableSet.of()));

你可以使用静态导入保存一些输入,如果这是你的事情:

import static com.google.common.collect.ImmutableSet.copyOf;
import static com.google.common.collect.ImmutableSet.of;
// snip...
this.foos = copyOf(Objects.firstNonNull(foos, of()));

答案 1 :(得分:7)

Collection是一个像任何其他人一样的参考,所以你可以这样做:

ImmutableSet.copyOf(Optional.fromNullable(foos).or(ImmutableSet.of()));

但是这一点变得非常少。更简单:

foos == null ? ImmutableSet.of() : ImmutableSet.copyOf(foos);