if / if - else / else with lambda expression [closed]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了if / if - else / else with lambda expression [closed]相关的知识,希望对你有一定的参考价值。

我正在编写一小段逻辑来检查Facebook API是否为我检索用户电子邮件,如果没有,我正在从请求参数设置电子邮件,或者如果不存在,我会抛出异常。我的问题是,你是否会根据Java 8-Lambda惯例在美学上改变任何东西以使其看起来更好?

       {
            UserProfile newUser = new     UserProfile(fbUser.getId());
            if( null == fbUser.getEmail() ) {     newUser.setEmail(userMail); }
            if( null == newUser.getEmail() ) { throw new MissingServletRequestParameterException("email", "String"); }
            newUser.setEmail(fbUser.getEmail());
            newUser.setUsername(fbUser.getName());
            newUser.setPassword(passwordEncoder.encode(fbReq.getAccessToken()));
            newUser.setFirebaseToken(fbReq.getFirebaseToken());
            newUser.setLanguage(HoopLocale.getById(locale.getLanguage().toLowerCase()).toString());

            UserAccount acc = new UserAccount();
            acc.setCurrency(currencyRepo.findById(CurrencyName.getById(fbReq.getCurrency()).getId())
                    .orElseThrow(() -> new ResourceNotFoundException("Currency id", "id", fbReq.getCurrency())));
            newUser.setUserAccount(acc);

            userRepository.save(newUser);
        }
答案

您可以使用ifPresentOrElse(在Java 9中引入):

Optional.ofNullable(userMail)
.ifPresentOrElse(newUser::setEmail, () -> {throw new MissingServletRequestParameterException("email", "String");});

替换你的这部分代码:

if( null == fbUser.getEmail() ) {     newUser.setEmail(userMail); }
if( null == newUser.getEmail() ) { throw new MissingServletRequestParameterException("email", "String"); }
另一答案

你可以使用Optionals,但请注意,这看起来“更好”是有争议的。

newUser.setEmail(
    Optional.ofNullable(fbUser.getEmail())
        .orElse(Optional.ofNullable(userMail)
        .orElseThrow(() -> new MissingServletRequestParameterException("email", "String")))
);

以上是关于if / if - else / else with lambda expression [closed]的主要内容,如果未能解决你的问题,请参考以下文章

html 基本IF,IF - ELSE和IF - ELSE IF - ELSE语句。

if...else if...else和switch语句的注意点,以及和js的if...else if...else的不同

R语言中的if else语句

为啥JAVA源码中if else大都省略else,怎样的条件能够省去else?

if--else 嵌套 怎么理解?

if else if else if else 的用法