需求是查询1号到31号之间每一个省份的数据,省份有31个,但是数据库里的数据是不全的,比如1号只有一个省份的数据,天数和省份都不保证有,这时候查询结果要保证数据库没数据的,用0给补全,麻烦提供个思路,不用sql,用代码处理
那就先查出来有的,然后再循环筛选把没有数据的再用0 补充就行了,这东西直接用sql查询不是来的更直接么
首先定义一个二数组,下标分别是1-31号,然后值为一个一维数组,这个一维数组的下标是省份ID,值为0
然后查询数据库按天数,省份分组统计出来
租然后循环你查出来的数据,然后下一个判断,首先判断天数下标的数据是否存在,存在就在判断省份的下标是否存在,如果存在就更新值
OK,这样就完成了,这样是效率最好的了,只是一个循环,不需要双循环
import java.util.HashMap;
import java.util.Map;
public class Test01 {
static class Data {
private Map<Integer, Map<String, Integer>> data;
public Data(int days, String[] provinces) {
data = new HashMap<>();
for (int i = 1; i <= days; i++) {
final Map<String, Integer> value = new HashMap<>();
for (String item : provinces) {
value.putIfAbsent(item, 0);
}
data.putIfAbsent(i, value);
}
}
public void add(int days, String province, int tongji) {
data.get(days).put(province, tongji);
}
public Map<Integer, Map<String, Integer>> getData() {
return data;
}
@Override
public String toString() {
return "Data{" +
"data=" + data +
'}';
}
}
public static void main(String[] args) {
final Data data = new Data(31, new String[]{"辽宁", "湖北"});
// select from database
data.add(1, "辽宁", 10);
data.add(1, "湖北", 11);
data.add(2, "辽宁", 10);
data.add(2, "湖北", 11);
System.out.println(data);
}
}
先把所有天所有身份的数据查出来,再按天分组;
for(1 ~ 31)循环,取出来每一天,没有就设为0;
然后再循环省份,没有也设为0
这都是啥问题呀, 我的天, 云里雾里, 没有数据造点数据啊, 问需求人员啊, 没有米怎么做饭呢? 循环某一个月的缩影天可以搜下java8 localdate
天数和省份全连接,再左关联统计数据,值为空时赋0 java代码同思路
两层循环不就解决了吗?第一层取天数,第二层取省份,判断如果省份数据为空没有的话,就把它置为零。
为啥不用sql ,Java也可以连接数据库得,这样不方便操作嘛,没有得加个判断条件就可以了,