1 回答
TA贡献1874条经验 获得超12个赞
public String getMyRequiredValue(Optional<String> value) {
return value.isPresent() ? getAnotherValue(value.get()).orElse(null) : "Random";
}
我首先想到的解决方案。它打破了建议我们isPresent()在调用之前总是需要检查的规则,get()并引入了异常处理。所以最好坚持第一个想法。
public String getMyRequiredValue2(Optional<String> value) {
try {
return getAnotherValue(value.get()).orElse(null);
} catch (NoSuchElementException e) {
return "Random";
}
}
我已经看到你试图利用map和flatMap。如果结果为Optional.empty(),则不清楚从何null而来:它可能是value或getAnotherValue(value.get())。
我们可以通过将来自的值保存value.get()到 a 中来跟踪它Holder<String>:
public String getMyRequiredValue3(Optional<String> value) {
final Holder<String> holder = new Holder<>();
return value.flatMap(i -> getAnotherValue(holder.value = i))
.orElse(holder.value == null ? "Random" : null);
}
同样,第一种方法仍然胜过这一点。
我们不需要Holder前面示例中的 a。相反,我们可以检查value.isPresent():
public String getMyRequiredValue4(Optional<String> value) {
return value.flatMap(this::getAnotherValue)
.orElse(value.isPresent() ? null : "Random");
}
添加回答
举报