多个for循环,解决为null方法

业务需求:参数是各个维度(机构,渠道,产品,客户,日期类型,口径,环节等),名字组合成不同的维度返回

比如前端的参数如下

机构:全机构、东南区(可以选多个也可以不选)

渠道:全渠道(可以选多个也可以不选)

产品:全产品(可以选多个也可以不选)

则要的结果是:全机构-全渠道-全产品、东南区-全渠道-全产品

分析:由于数据不多所以用for嵌套,七个for循环,在最内层创建一个对象接收这些维度,把对象add到一个list集合中返回给前端

难点:这些集合都可以为null,有一个为null就会报异常

解决方法:如果哪个集合为null时,则自定义一个对象,让其不为null;遍历完成后,在剔除掉

代码:

public List<EachDimensionResultDTO> getEachDimensionCards(EachDimension eachDimension){

//上面的参数就是各个维度的集合对象

//最终返回的集合

List<EachDimensionResultDTO> resultDTOList = Lists.newArrayList();

//维度集合可以为NulL,为null时for循环就不能执行下去,所以为null时自定义一个对象,循环为后再替换掉

//自定义一个code和name都为自定义值的对象

EachDimessionItemDTO eachDimenssionDTODefaultNull = new EachDimensionItemDTO("null","null");

//由参数得到产品code集合

List<EachDimensionItemDTO> eachDimensionProduct = eachDimension.getProductCodes();

//为null时加入上面自定义对象

if(CollectionUtils.isEmpty(eachDimensionProduct )){

eachDimensionProduct = new ArrayList();

eachDimensionProduct.add(eachDimenssionDTODefaultNull );

}

//由参数得到机构code集合

。。。。。。(同上)

//由参数得到渠道code集合

。。。。。。(同上)

//定义一个对象接收for循环后的各个维度

EachDimensionResultDTO eachDimensionResultDTO = null;

//卡片组合起来的名字,比如东南区-全渠道-全产品

String ruleName = null;

//把名字放入list中,方便剔除等于“null"的

List<String> ruleNameList = null;

for(EachDimensionItemDTO product:eachDimensionProduct){

for(EachDimensionItemDTO channel:eachDimensionChannel){

for(EachDimensionItemDTO customer:eachDimensionCustomer){

。。。。。。(我总共由七个for循环)

//各个维度组成一个对象

eachDimensionResultDTO = new EachDimensionResultDTO();

//把名字都加入

ruleNameList = new ArrayList<>();

ruleNameList.add(product.getDimensionName);

ruleNameList.add(channel.getDimensionName);

ruleNameList.add(customer.getDimensionName);

。。。。。。(加入其他几个)

//删除名字为”null"的

ruleNameList.romoveIf(name->"null".equals(name));

//把名字用-连接起来

ruleName = String.join("-",ruleNameList);

eachDimensionResultDTO.setRuleName(ruleName);

//code不为“null"时再对code赋值,下面都是这个逻辑

if(!"null".equals(product.getDimensionCode)){

eachDimensionResultDTO.setProductCode(product.getDimensionCode);

}

。。。。。。(下同)

//加入到集合中返回

resultDTOList.add(eachDimensionResultDTO);

}

}

}

}

经验分享 程序员 微信小程序 职场和发展