我正在尝试编写一个 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个赞
看来您真正需要做的是交换map
和flatMap
。更改代码
.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>
直到此操作。
添加回答
举报
0/150
提交
取消