首页 > 解决方案 > 如何从可选 ifPresentOrElse 返回方法值

问题描述

我有一个编译错误,因为 findByUserIdAndVoteDate 返回 void (不是 VoteResponseDTO ), voteRepository.save() - 返回我需要的值,我怎样才能得到它?

    public VoteResponseDTO addVote(User user, VoteCreationDTO voteCreationDTO) {  
   VoteResponseDTO createdVote = voteRepository.findByUserIdAndVoteDate(user.getId(), LocalDate.now(clock))
                .ifPresentOrElse(oldVote -> {
                            var vote = new Vote(user, restaurant);
                            vote.setId(oldVote.getId());
                            voteRepository.save(vote);
                        },
                        () -> voteRepository.save(new Vote(user, restaurant)));
        }

在此处输入图像描述

标签: java

解决方案


感谢@Michael,它有效。

VoteResponseDTO voteResponse = toVoteResponseDTO(voteRepository.findByUserIdAndVoteDate(user.getId(), LocalDate.now(clock))
                .map(oldVote -> {
                    var vote = new Vote(user, restaurant);
                    vote.setId(oldVote.getId());
                    return voteRepository.save(vote);
                }).orElseGet(
                        () -> voteRepository.save(new Vote(user, restaurant))));

推荐阅读