【发布时间】:2019-10-23 18:25:56
【问题描述】:
我正在尝试编写一个 lambda 函数来获取员工位置偏好并具有以下代码示例。
但是对于我的 lambda 函数,我在 flatMap(this::buildEmployeeGeolocation) 处遇到编译错误
说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();
}
【问题讨论】:
标签: java lambda optional flatmap