java - 使用 lambda 时如何修复“意外的返回值”?
问题描述
当我想使用 lambda 调用另一个 Service.java 中的方法,然后将其用作决定返回值的条件时。它总是在 lambda 中表示“意外的返回值”。我该如何退货?
public SortOrder transform(SortOrder sort, String abc) {
if (sort == null) {
return SortOrder.A;
} else if (sort.equals(SortOrder.B) && abc != null) {
return AnotherService.getString(abc)
.map(l -> l.ifPresent(m -> {
if (m.getName().equals("name")) {
return SortOrder.C; //ERROR: unexpected return value
}
return sort; //ERROR: unexpected return value
}));
} else {
return sort;
}
return sort;
}
解决方案
该函数Optional.ifPresent
接受一个消费者,它根本不允许返回一个值。传递给的 lambdaifPresent
必须具有void
返回类型。
您可能最好不要在该部分使用 lambda,而是编写if (l.isPresent()) { ... }
.
如果你坚持使用函数式风格,你可以写l -> l.filter(m -> m.getName().equals("name")).map(l -> SortOrder.C).orElse(sort)
.
推荐阅读
- google-cloud-storage - 访问 Ad Manager 存储分区中的数据
- python - Subtour 约束导致 docplex 中的警告
- swift - 在选取器中显示多个视图
- r - 如何绘制同一 DataFrame 中 3 个向量的百分比变化?
- apache-arrow - Apache 箭头 - 将序列化的 VectorSchemaRoot 读取到 C++
- asp.net - 如何使用 X-Frame-Options 标头防止 ClickJacking 攻击
- r - OfficeR 错误:“Docx 已编辑”,但文件甚至还不存在。会发生什么?
- ceph - Windows上的Ceph:无法映射RBDimage
- reactjs - react+nextjs 认证方式
- javascript - 将边连接到 mxgraph 中顶点的锚点