java - 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
,这是确切的代码,我只更改了一些变量名
解决方案
看起来您应该将orElse
in替换getOrgId
为orElseGet(() -> getById(someId).getOrgId())
.
推荐阅读
- java - 启动我的简单 Spring Boot 应用程序的问题
- vb.net - 如何用类的对象填充数据网格视图
- opengl - GLSL 着色器(编译错误)
- c# - 使用最小起订量的 C# 模拟
- python - python中的“int类型的对象没有长度”是什么意思?
- python - 带有 if/elif/else 语句的 While 循环
- mysql - 使用 DENSE_RANK() MySQL 缺少右括号
- postgresql - Asp Net Boilerplate - 设置 Schema-Per-Tenant Multitenancy (EntityFrameworkCore & PostgreSQL)
- c# - SerialDataReceivedEventHandler 不工作 c#
- java - 警报管理器未设置特定日期或超过 24 小时的警报