【发布时间】:2020-07-16 17:53:00
【问题描述】:
我有以下代码:
private List<User> findUsers(...) {
...
return usersData.stream() //userData is another list of objects
.findFirst()
.map(this::getCode)
.map(code-> {
if (...) {
Optional<AnotherObject> anotherObject = getAnotherObject();
return anotherObject.map(userService::getUsersFromAnotherObject) // getUsersFromAnotherObject returns List<User> but the whole line returns Optional of List<User>
} else {
...
return null;
}
}).orElseGet(() -> findXYZ(...));
}
没有编译并说:
"lambda 表达式中的错误返回类型:List<User> 无法转换为 Optional<List<User>>"
即使 findXYZ 和所有其他 if/else 语句实际上返回 List 类型。
谁能解释一下代码有什么问题?
编辑: 抱歉,我注意到其中一个 if 语句实际上返回了 List 的 Optional
如果有人感兴趣,我只需将第一个“if”编辑为:
return userService.getUsersFromAnotherObject(anotherObject.orElse(null));
【问题讨论】:
-
...和return实现了什么,getCode和findXYZ的返回类型是什么? -
他提到那些'return'和findXyz的返回类型是List
-
如果你给我们a reproducible example,我会发现更容易提供帮助,也就是说,提供确切的错误信息。
标签: lambda java-8 java-stream optional findfirst