Melad Basilius
Melad Basilius

Reputation: 4306

Optional to perform an action in either cases

I have a method

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

I need to do a little modification, in case of confirmationRequest is null then call confirmPayment(identity, entity);

How can i say something like Optional.ofNullable(confirmationRequest) then chooseClient(entity) then ifPresent call confirmPayment(identity, entity,confirmationRequest); ifNotPresent call confirmPayment(identity, entity);

Signatures of confirmPayment

 public Single<SignatureOrder> confirmPayment(Identity identity, PaymentEntity entity)
 public Single<SignatureOrder> confirmPayment(Identity identity, PaymentEntity entity, ConfirmationRequest confirmationRequest)

Upvotes: 1

Views: 66

Answers (2)

Luis Ramirez-Monterosa
Luis Ramirez-Monterosa

Reputation: 2242

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);
}   

mapping on null returns empty, by using orElseGet if it maps to empty it would call this lambda

Upvotes: 3

Naman
Naman

Reputation: 31878

You can do it as :

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

Upvotes: 3

Related Questions