20、填充数据库查询出来的list值(实体中有一个时间和一个数量)

1)、根据当前时间来定位一个日期的时间段(获取当前时间往前,或者往后的一段时间)

/**
 * 获取时间
 *
 * @param intervals
 * @return
 * @author LZH
 * @date 2022/3/21 21:45:06
 * @version 1.0
 */

public List<String> getDateAll(int intervals){
    ArrayList passDaysList = new ArrayList<>();
    for (int i = 0; i <intervals; i++) {
        passDaysList.add(getDays(i,false));
    }
    return passDaysList;
}

/**
 *
 * @param i 第几天
 * @param b true未来 false 过去
 * @return
 */
private static String getDays(int i, boolean b) {
    Calendar calendar = Calendar.getInstance();
    if (b) {
        calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + i);
    }else {
        calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - i);
    }
    Date today = calendar.getTime();
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    String result = format.format(today);
    return result;
}

2)填充值

Listlist :数据库查到的值

int interval:时间范围

填充一个map,map里面包含所有的数据,循环map,如果这个数据库查出来的值,没有map中的值,就把此条填充进,数据库查询出来的里面

1、循环hashMap的几种方法(常用第一种):

1、第一种,循环取出key,value
Map<String, String> map = new HashMap<String, String>();
for(Map.Entry<String, String> entry : map.entrySet()){
	System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue())
}
2、第二种,分别取出key和value
 Map<String, String> map = new HashMap<String, String>();
 
//iterating over keys only
for (String key : map.keySet()) {
	System.out.println("Key = " + key);
}
 
//iterating over values only
for (String value : map.values()) {
	System.out.println("Value = " + value);
}
3、第三种,迭代器
    Map<String, String> map = new HashMap<String, String>();
    Iterator<Map.Entry<String, String>> entries = map.entrySet().iterator();
    while (entries.hasNext()) {
	Map.Entry<String, String> entry = entries.next();
	System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
4、第四种,取出key,并根据key取出vlaue,效率低,不建议使用
    Map<String, String> map = new HashMap<String, String>();
    for (String key : map.keySet()) {
	String value = map.get(key);
	System.out.println("Key = " + key + ", Value = " + value);
}

2、使用treeMap根据key值进行排序

TreeMap<String,String> treeMap = new TreeMap<>(subMap);
/**
     * 填充没有查到的值
     *  
     * @param list
     * @return  
     * @author LZH
     * @date 2022/3/21 20:23:51
     * @version 1.0
     */
    public List<TableInfoVo> ReplenishData(List<TableInfoVo> list,int interval){
        List<TableInfoVo> returnList = new ArrayList<>();
//        查出当前日期往前的日期的日期集合
        List<String> dateAll = getDateAll(interval);
//        所有日期中的值
        Map<String,String> dateAllMap =new HashMap<>();
        dateAll.forEach(e->{
            dateAllMap.put(e,"0");
        });
//        把查出来的值塞到map中
        Map<String,String> subMap = new HashMap<>();
        list.forEach(l->{
            subMap.put(l.getDateTime(),l.getTableCount());
        });
//        比较两个map
        for(Map.Entry<String,String> entry : dateAllMap.entrySet()) {
            if (StringUtils.isEmpty(subMap.get(entry.getKey()))){
                subMap.put(entry.getKey(),entry.getValue());
            }
        }
//        放在treeMap中根据key值进行排序
        TreeMap<String,String> treeMap = new TreeMap<>(subMap);
//        循环treeMap中的值,转换成list ,效率低
 //        for (String key : treeMap.keySet()){
 //           TableInfoVo tableInfoVo = new TableInfoVo();
//            tableInfoVo.setDateTime(key);
 //           tableInfoVo.setTableCount(treeMap.get(key));
//            returnList.add(tableInfoVo);
  //       }

//        再把map中的值转化成list中的值
        for(Map.Entry<String,String> entry : treeMap.entrySet()) {
           TableInfoVo tableInfoVo = new TableInfoVo();
          tableInfoVo.setDateTime(entry.getKey());
          tableInfoVo.setTableCount(entry.getValue());
          returnList.add(tableInfoVo);
        }

        return returnList;
    }