Java8 使用 Optional 简化表达式

Java8 simplify expression using Optional

我有一个代码块:

public Builder withMultiValueMap(MultiValueMap<String, String> multiValueMap) {
  ...
  withRespondentId(Long.valueOf(multiValueMap.getFirst("respondentId")));
  ...
  return this;
}

如果 respondentId 键没有值,有时地图可以 return null。 我可以使用

之类的方式以旧方式处理它
  String respondentId = multiValueMap.getFirst("respondentId");
  withRespondentId(respondentId == null? null: Long.valueOf(respondentId));

...但我想做得更好!

是否可以使用 java8 可选 或其他东西进行简化?

与此表达式具有相同结果的语法:

respondentId == null? null: Long.valueOf(respondentId)

Optional.ofNullable(respondentId).map(Long::valueOf).orElse(‌​null)

由于它实际上更长,所以它不是一个完整的胜利,尽管它可能会被认为更具可读性。

如果MultiValueMap是你自己的class,你可以将getFirst迁移到

Optional<V> getFirst(K key);

multiValueMap.getFirst(key).map(Long::valueOf).getOrElse(null);