为了账号安全,请及时绑定邮箱和手机立即绑定

方法引用中的返回类型错误:无法将 Employee 转换为Optional<U>

方法引用中的返回类型错误:无法将 Employee 转换为Optional<U>

qq_遁去的一_1 2023-12-10 15:12:25
我正在尝试编写一个 lambda 函数来获取员工位置偏好并具有下面的代码示例。flatMap(this::buildEmployeeGeolocation) 但对于我的 lambda 函数,我在说 时遇到编译错误Bad return type in method reference: cannot convert com.abc.EmployeeGeolocation to java.util.Optional<U>。我在这里缺少什么?public Optional<EmployeeGeolocation> getEmployee(final SessionId sessionId) {    return Optional.ofNullable(employeePreferencesStore.getEmployeeAccountPreferences(sessionId))            .map(preferences -> preferences.getPreference(PreferenceKey.Location))            .filter(StringUtils::isNotBlank)            .map(this::readEmployeelocation)            .flatMap(this::buildEmployeeGeolocation);}private Optional<EncryptedGeolocation> readEmployeeLocation(@NonNull final String encryptedGeolocation) {    try {        return Optional.ofNullable(objectMapper.readValue(encryptedGeolocation, EmployeeGeolocation.class));    } catch (final IOException e) {        log.error("Error while reading the encrypted geolocation");        throw new RuntimeException(e);    }}private EmployeeGeolocation buildEmployeeGeolocation(@NonNull final EncryptedGeolocation unditheredEncryptedGeolocation) {    return EmployeeGeolocation.builder()            .latitude(10.0)            .longitude(10.0)            .accuracy(1.0)            .locationType(ADDRESS)            .build();}
查看完整描述

1 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

看来您真正需要做的是交换mapflatMap。更改代码

.map(this::readEmployeeLocation) 
.flatMap(this::buildEmployeeGeolocation);

.flatMap(this::readEmployeeLocation) // since you already have an Optional<String>
.map(this::buildEmployeeGeolocation); // above results in Optional<EncryptedGeolocation>

重要提示:从代码中推断Optional.ofNullable(...).map(...).filter(StringUtils::isNotBlank),它将导致Optional<String>直到此操作。


查看完整回答
反对 回复 2023-12-10
  • 1 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信