在Optional中重构消费者内部的if-else

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

我有一段代码如下:

    @Nullable SomeUrn someUrn = Optional.ofNullable(somePage)
        .map(somePage::someEntity)
        .map(entity -> {
          if(entity.isMember()) {
            return entity.getMember();
          } else {
            LOG.error("Expected a member but received " + entity);
            return null;
          }})
        .orElse(null);

Java 8 中是否有更好的方法来处理异常?

我试过了

.map(entity -> 
    Optional.ofNullable(entity)
        .map(ent -> ent.getMember())
        .orElseGet(() -> {
            LOG.error("Expected a member but received " + ent); 
            return null;
        })
.orElse(null);

但是我丢失了要记录的实体,而且它比 if-else 更复杂

java java-8
1个回答
0
投票

其中一个想法可能是尝试声明一个

Predicate<Entity
,例如

Predicate<Entity> loggingPredicate = entity -> {
        if(entity.isMember()) {
            return true;
        } else {
            // do something with the entity like logging
            return false;
        }
 };

并进一步利用它,例如:

Optional.ofNullable(somePage)
        .map(somePage::someEntity)
        .filter(loggingPredicate)
        .map(entity -> entity.getMember())
        .orElse(null);
© www.soinside.com 2019 - 2024. All rights reserved.