前言:21年广州荔湾区成了疫情灾区,很多人都没有工作,被居家隔离,感染病毒概率死亡率是0.005%,没有工作死亡率是100%,因此作为普通老百姓,自己开发了一个数据分析工具,叫yandas。
首先我们看看表:
有两张表,A表记录了很多款产品的三个基础字段,分别是产品ID,地区代码和重量:
B表是运费明细表,这个表结构很“业务”。每行对应着单个地区,不同档位重量,所对应的运费:
现在,我们想要结合A表和B表,统计出A表每个产品付多少运费,应该怎么实现?
可以先自己思考一分钟图片
分析:
1、分别读取表1数据,表2数据
2、遍历表1数据,获取每行重量数据和地区代码
3、再遍历表2,判断表2的地区代码和表1的地区代码
4、如果代码相同,就遍历表2表头的重量范围
5、再判断表1的重量在表2的重量范围内,找出所对应的金额
List<ListOrderedMap<String, Object>> listMap1 = excelUtil.read(f1, a); //表1 id address kg
List<ListOrderedMap<String, Object>> listMap2 = excelUtil.read(f2, a); //表2 0.5~1
for(int i = 0 ; i < listMap1.size(); i++){ //遍历表1,获取每个kg
ListOrderedMap<String, Object> rowData1 = listMap1.get(i);
String name1 = rowData1.get("name1") + ""; //address
String name2 = rowData1.get("name2") + ""; //kg
if (_stringUtils.isNum(name1)) { //address是数据 继续
System.out.println(name1+" "+name2);
ListOrderedMap<String, Object> rowData2_1 = listMap2.get(0);
for (int j = 0; j < listMap2.size(); j++) { //遍历表2 获取代码
ListOrderedMap<String, Object> rowData2 = listMap2.get(j);
String address2 = rowData2.get("name0") + ""; //address2
if(name1.equals(address2)){
System.out.println(name1+" "+name2+" "+address2);
for (int n = 0; n < rowData2_1.size(); n++) { //遍历表2 表头的0.5~1
String name2_1 = rowData2_1.get("name" + n) + "";
if (name2_1.contains("~")) {
String name2_1_1 = name2_1; //0~0.5
String ns[] = name2_1_1.split("~");
if (Double.parseDouble(ns[0] + "") < Double.parseDouble(name2) && Double.parseDouble(name2) <= Double.parseDouble(ns[1] + "")) {
String n2 = rowData2.get("name" + n) + "";
System.out.println(name1+" "+name2+" "+address2 + " "+n2);
rowData1.put("name" + (rowData1.size()), n2);
}
}
}
}
}
}
}