#java #optional
Вопрос:
Мне нужно сравнить идентификаторы двух городов. Первый необязательный < Длинный>, второй длинный.
public boolean isEqual(Comment comment) {
return userService.findById(comment.getUser().getId())
.map(user -> user.getCity().getId()) // Optional <Long>
.filter(user -> user
.equals(postService.findById(comment.getPost().getId())
.map(p -> p.getUser().getCity().getId()))) // Long
.isPresent();
}
Как я могу это сделать?
Комментарии:
1. Используйте
flatMap
вместоmap
. Прямо сейчас у вас, похоже, естьOptional<Optional<Long>>
и, следовательно, с ним неудобно работать.2. Что значит сравнивать Длинный с
Optional.empty()
?
Ответ №1:
Вы можете напрямую сравнивать варианты:
public boolean isEqual(Comment comment) {
Optional<Long> userCityFromComment = userService
.findById(comment.getUser().getId())
.map(user -> user.getCity().getId());
Optional<Long> userCityFromPost = postService
.findById(comment.getPost().getId())
.map(p -> p.getUser().getCity().getId());
return userCityFromComment.equals(userCityFromPost);
}
Обратите внимание, что Optional.empty().equals(Optional.empty())
это true
так .