【问题标题】:If/if - else/ else with lambda expression [closed]带有 lambda 表达式的 if/if - else/ else [关闭]
【发布时间】:2019-09-04 12:20:20
【问题描述】:

我正在编写一小段逻辑来检查 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);
        }

【问题讨论】:

标签: java lambda java-8 stream


【解决方案1】:

您可以使用 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"); }

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 非常喜欢,谢谢! :)
    • 完成,感谢您的通知,我是新来的。 :)
    猜你喜欢
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 2012-09-24
    • 2012-10-26
    相关资源
    最近更新 更多