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;
}