java天数省份逻辑问题思路

问题遇到的现象和发生背景

需求是查询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也可以连接数据库得,这样不方便操作嘛,没有得加个判断条件就可以了,