首页 > 解决方案 > Java 可选映射和过滤器未按预期工作

问题描述

我有以下代码应该从 modelService 返回 orgId 但不能使用 Optional

 public Long getOrgId(String someId) {
    return this.getSpecialOrgId(someId).orElse(this.getById(someId).getOrgId());
}

private Optional<Long> getSpecialOrgId(String someId) {
    return modelService.getModel(someId).map(Model::getOrgId).filter(this::isConditionTrue);
}

此代码不起作用getSpecialOrgId总是返回empty

但是下面的代码效果很好,不确定上面的代码有什么问题

 private Long getOrgId(String someId) {
     Optional<Long> orgIdFromModel = this.getSpecialOrgId(someId);
     if (orgIdFromModel.isPresent()) {
         return orgIdFromModel.get();
     }
     return this.getById(someId).getOrgId();
 }

 private Optional<Long> getSpecialOrgId(String someId) {
     Optional<Model> modelOptional = modelService.getModel(someId);
     if (modelOptional.isPresent()) {
         Model model = modelOptional.get();
         if (isConditionTrue(model.getOrgId())) {
             return of(model.getOrgId());
         }
     }
     return empty();
 }

isConditionTrue总是在哪里true,这是确切的代码,我只更改了一些变量名

标签: javalambdajava-8optional

解决方案


看起来您应该将orElsein替换getOrgIdorElseGet(() -> getById(someId).getOrgId()).


推荐阅读