我有一个包含可选Map
:
private Optional<ImmutableMap<String, String>> stuff;
在我的类构造函数中,我传递了Map<String, String> inputStuff
,其中inputStuff
可能是:
null
Map
Map
对于前两个实例,我需要存储Optional.absent()
,对于第三个实例,我需要存储一个Optional
不可变的地图副本。在处理这个方面我能想出的最好的是:
final ImmutableMap<String, String> tmp = ImmutableMap.copyOf(Objects.firstNonNull(inputStuff, ImmutableMap.<String, String>of()));
if (inputStuff.isEmpty())
{
this.stuff = Optional.absent();
}
else
{
this.stuff = Optional.of(inputStuff);
}
有没有更简洁的方法来处理这个问题?
答案 0 :(得分:9)
为什么不简单地做:
if (inputStuff == null || inputStuff.isEmpty()) {
this.stuff = Optional.absent();
} else {
this.stuff = Optional.of(ImmutableMap.copyOf(inputStuff));
}
我没有看到为什么要在这里创建临时变量的原因。如果您更喜欢使用三元运算符,甚至可以避免重复分配给this.stuff
。
答案 1 :(得分:2)
我会这样做:
this.stuff = (inputStuff == null || inputStuff.isEmpty())
? Optional.absent()
: Optional.of(ImmutableMap.copyOf(inputStuff));
或@Xaerxess发布它的方式。它更直接,更容易猜到这里发生了什么。