Java8使用Optional简化表达式

时间:2016-09-28 15:06:03

标签: java java-8 optional

我有一个代码块:

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

如果没有 respondentId 键的值,map有时会返回 null 。 我可以使用类似

之类的东西来处理它
  String respondentId = multiValueMap.getFirst("respondentId");
  withRespondentId(respondentId == null? null: Long.valueOf(respondentId));

......但我想做得更好!

是否可以使用 java8 Optional 或其他内容进行简化?

2 个答案:

答案 0 :(得分:1)

与此表达式具有相同结果的语法: respondentId == null? null:Long.valueOf(respondentId) 是 Optional.ofNullable(respondentId).MAP(龙::的valueOf).orElse(空) 由于它实际上更长,它并不是一个完整的胜利,尽管它可能会更具可读性。

答案 1 :(得分:1)

如果MultiValueMap是您自己的班级,则可以将getFirst迁移到

Optional<V> getFirst(K key);

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