как сравнить необязательный с длинным

#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 так .