0

我有一个包含可选的类Map

 private Optional<ImmutableMap<String, String>> stuff;

在我的类构造函数中,我通过了Map<String, String> inputStuffinputStuff可能是:

  • 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);
    }

有没有更清洁的方法来处理这个?

4

2 回答 2

8

为什么不干脆做:

if (inputStuff == null || inputStuff.isEmpty()) {
  this.stuff = Optional.absent();
} else {
  this.stuff = Optional.of(ImmutableMap.copyOf(inputStuff));
}

我看不出为什么要在这里创建一个临时变量。如果您更喜欢使用三元运算符,您甚至可以避免对this.stuff.

于 2013-09-14T10:18:22.453 回答
1

我会这样做:

this.stuff = (inputStuff == null || inputStuff.isEmpty()) 
   ? Optional.absent()
   : Optional.of(ImmutableMap.copyOf(inputStuff));

或者@Xaerxess 发布它的方式。它更直接,更容易猜出这里发生了什么。

于 2013-09-14T10:27:07.370 回答