首页 > 解决方案 > 如何在 java 8 的一条语句中返回以下代码?

问题描述

我是 Java 8 的新手,需要帮助。如何压缩下面的代码,以便我可以在一个语句中返回所有代码?

Optional<OfferResponseInfo> offerResponseInfo = newOfferRepository.findByOidAndIsActiveAndIsHidden(oid, true, false)
                .map(OfferMapper.INSTANCE::offerToOfferResponse);

boolean flag = principal.getName().equals(offerResponseInfo.get().getUser().getfName()
        .concat(offerResponseInfo.get().getUser().getlName())) ? true:false;
offerResponseInfo.get().setOfferOwner(flag);

return offerResponseInfo
        .orElseThrow(() -> {
            throw new DataNotFoundException(String.format("No offer found for oid %s", oid));
        });

标签: javajava-8

解决方案


  1. 一些代码对齐
  2. 提取一些变量
  3. 检查 offerResponseInfo 是否较早存在 - 当您从存储库中获取它时

        OfferResponseInfo offerResponseInfo = newOfferRepository
            .findByOidAndIsActiveAndIsHidden(oid, true, false)
            .map(OfferMapper.INSTANCE::offerToOfferResponse)
            .orElseThrow(() -> {
                throw new DataNotFoundException(String.format("No offer found for oid %s", oid));
            });
    
    
        Principal offerUser = offerResponseInfo.getUser();
        String offerUserName = offerUser.getfName().concat(offerUser.getlName());
        boolean isOwner = principal.getName().equals(offerUserName);
        offerResponseInfo.setOfferOwner(isOwner);
    
        return offerResponseInfo;
    

全部在一个语句中

        return newOfferRepository
            .findByOidAndIsActiveAndIsHidden(oid, true, false)
            .map(OfferMapper.INSTANCE::offerToOfferResponse)
            .map(ori -> {
                boolean flag = principal.getName().equals(ori.getUser().getfName()
                        .concat(ori.getUser().getlName()));
                ori.setOfferOwner(flag);
                return ori;
            })
            .orElseThrow(() -> {
                return new DataNotFoundException(String.format("No offer found for oid %s", oid));
            });

推荐阅读