可选以在任一情况下执行操作

问题描述 投票:1回答:2

我有一个方法

   public Single<SignatureOrder> confirmPayment(PaymentEntity entity, Identity identity, ConfirmationRequest confirmationRequest) {
        return chooseClient(entity)
                .confirmPayment(identity, entity,confirmationRequest);
    }

我需要做一点修改,如果confirmationRequestnull然后调用confirmPayment(identity, entity);

我怎么能说像Optional.ofNullable(confirmationRequest)然后chooseClient(entity)然后ifPresent调用confirmPayment(identity, entity,confirmationRequest); ifNotPresent调用confirmPayment(identity, entity);

confirmPayment的签名

 public Single<SignatureOrder> confirmPayment(Identity identity, PaymentEntity entity)
 public Single<SignatureOrder> confirmPayment(Identity identity, PaymentEntity entity, ConfirmationRequest confirmationRequest)
java java-8 optional
2个回答
3
投票
public Single<SignatureOrder> confirmPayment(PaymentEntity entity, Identity identity, ConfirmationRequest confirmationRequest) {
    return Optional.ofNullable(confirmationRequest)
      .map(cr -> chooseClient(entity).confirmPayment(identity, entity, cr)
      .orElseGet(() -> chooseClient(entity).confirmPayment(identity, entity);
}   

null上的映射返回为空,如果它映射为空则使用orElseGet它将调用此lambda


3
投票

你可以这样做:

public Single<SignatureOrder> confirmPayment(PaymentEntity entity, Identity identity, ConfirmationRequest confirmationRequest) {
    return confirmationRequest != null ? 
            chooseClient(entity).confirmPayment(identity, entity, confirmationRequest) : 
            chooseClient(entity).confirmPayment(identity, entity);
}
© www.soinside.com 2019 - 2024. All rights reserved.