【发布时间】:2019-02-19 21:52:37
【问题描述】:
使用 Optional.of() 方法进行方法链接是个好主意吗?
我与一群同事讨论了 Optional.of() 方法。 目前他们正在使用 Optional.of() 方法的项目之一 实现方法链函数式编程风格。
这里我举个例子:
TxResponse initTxDataResponse = gateway.initiateTx(initTxDataRequest);
Optional.of(initTxDataResponse)
.map(initTxDataResponse::getReturnCode)
.filter(code -> ResponseCode.SUCCESS.getCode().equals(code))
.map(code -> {
// doing some business logic ,we are not
return code;
}).orElseThrow(() -> new NoTransactionFound());
我觉得我们过度使用 Optional.of() 方法
在 jdk 8 中使用 Optional.of() 方法来实现函数式编程风格是一种好习惯吗?
案例2:
TxResponse response = transactionRepository.getTransacationById(TransactionId).elseThrow(() -> ResourceNotFoundException());
Optional.of(response)
.map(response::getReturnCode)
.filter(code -> ResponseCode.SUCCESS.getCode().equals(code))
.map(code -> {
// doing some business logic ,we are not
return code;
}).orElseThrow(() -> new RuntimeException());
在这种情况下 Optional.of() 需要实现函数式编程风格?
【问题讨论】:
-
没有。这不是它的用途。
-
@JBNizet 那你能解释一下它的用途吗?
-
Optional被设计为一个返回值,表示该值可能为空(常用于Stream处理结果)。 -
是的,这就是用例之一。 OP 提到的也是另一个用例,对吧?在不关心 null 值的情况下进行操作?
-
youtu.be/fBYhtvY19xA?t=5m8s。 @PankajSinghal 是的,这是另一个用例。 Optional 不是设计的用例。 youtu.be/fBYhtvY19xA?t=24m51s.
标签: java lambda java-8 optional