嵌套循环优化

业务逻辑场景:将txt文件中的信息与数据库信息进行比对,比对失败生成相应的错误信息

比如while循环次数为m,for循环次数为n
优化之前,两个循环嵌套 循环次数:m*n

            while ((lineTxt = br.readLine()) != null) {
    
    
				//解析txt文件 根据|分割数据
	            arrStrings = lineTxt.split("\\|");
	            // 打印通知报文保单号、总保费 个单层数据量
				System.out.println("报文中团单号"+arrStrings[0]+"对应的总保费为"+arrStrings[1]+",个单层数据条数为"+arrStrings[2]);
				list.add(arrStrings[0]);
				if(mSSRS.getMaxRow()!=0){
    
    
	        	for (i=1;i <= mSSRS.getMaxRow();i++){
    
    
		            //说明对账失败原因并写入txt文件
					//保单号相同
					if(mSSRS.GetText(i,1).equals(arrStrings[0])){
    
    
						if(!((Double.parseDouble(mSSRS.GetText(i,2)))==(Double.parseDouble(arrStrings[1])))){
    
    
							str.append(arrStrings[0]+"|"+"2"+"|"+"总保费不一致"+"\n");
							mErrorNum++;
						}
						if(!mSSRS.GetText(i,3).equals(arrStrings[2])){
    
    
							str.append(arrStrings[0]+"|"+"3"+"|"+"个单层数据量不一致"+"\n");
							mErrorNum++;
						}
						
						break;
					}
				}
            }else{
    
    
        		logger.info("数据库查询条数为0");
            }
	        	if(i>mSSRS.getMaxRow()){
    
    
					str.append(arrStrings[0]+"|"+"1"+"|"+"核心缺少"+"\n");
					mErrorNum++;
	        	}
		}

优化之后两个循环的循环次数: m+n

    	for (i=1;i <= mSSRS.getMaxRow();i++){
    
    
    		map.put(mSSRS.GetText(i,1), mSSRS);
    	}
    	        while ((lineTxt = br.readLine()) != null) {
    
    
            arrStrings = lineTxt.split("\\|");
            if (map.get(arrStrings[0]) != null) {
    
    
				if(!((Double.parseDouble(mSSRS.GetText(i,2)))==(Double.parseDouble(arrStrings[1])))){
    
    
					str.append(arrStrings[0]+"|"+"2"+"|"+"总保费不一致"+"\n");
					mErrorNum++;
				}
				if(!mSSRS.GetText(i,3).equals(arrStrings[2])){
    
    
					str.append(arrStrings[0]+"|"+"3"+"|"+"个单层数据量不一致"+"\n");
					mErrorNum++;
				}
			}else{
    
    
				str.append(arrStrings[0]+"|"+"1"+"|"+"核心缺少"+"\n");
				mErrorNum++;
			}
        }

猜你喜欢

转载自blog.csdn.net/weixin_45163291/article/details/128703309