feat: 数据查询每天限制最多num条
parent
044c4ae881
commit
ef3087d88d
@ -0,0 +1,69 @@
|
|||||||
|
package com.xydl.cac.util;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class DataUtil {
|
||||||
|
|
||||||
|
// 从数据里每天抽取num条
|
||||||
|
public static List<Map<String, Object>> pickNumPerDay(List<Map<String, Object>> source, Integer numPerDay) throws Exception {
|
||||||
|
|
||||||
|
// 按天划分
|
||||||
|
LinkedHashMap<String, List<Map<String, Object>>> map = new LinkedHashMap<>();
|
||||||
|
for (Map<String, Object> item : source) {
|
||||||
|
String time = (String) item.get("acquisitionTime");
|
||||||
|
Date date = DateUtil.parse(time);
|
||||||
|
String day = DateUtil.format(date, "yyyy-MM-dd");
|
||||||
|
|
||||||
|
List<Map<String, Object>> list = map.get(day);
|
||||||
|
if (list == null) {
|
||||||
|
list = new ArrayList<>();
|
||||||
|
list.add(item);
|
||||||
|
map.put(day, list);
|
||||||
|
} else {
|
||||||
|
list.add(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 过滤多余
|
||||||
|
for (List<Map<String, Object>> list : map.values()) {
|
||||||
|
if (list.size() > numPerDay) {
|
||||||
|
reduceOneDaySize(list, numPerDay);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 合并返回
|
||||||
|
List<Map<String, Object>> result = new ArrayList<>();
|
||||||
|
for (List<Map<String, Object>> list : map.values()) {
|
||||||
|
result.addAll(list);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void reduceOneDaySize(List<Map<String, Object>> list, Integer numPerDay) {
|
||||||
|
int m = list.size() / numPerDay;
|
||||||
|
int x = list.size() - numPerDay;
|
||||||
|
if (m == 1) {
|
||||||
|
if (x == 1) {
|
||||||
|
list.remove(0);
|
||||||
|
} else {
|
||||||
|
int idx = 0;
|
||||||
|
while (list.size() > numPerDay) {
|
||||||
|
if (idx >= list.size()) {
|
||||||
|
idx = 0;
|
||||||
|
}
|
||||||
|
list.remove(idx);
|
||||||
|
idx++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
List<Map<String, Object>> newlist = new ArrayList<>();
|
||||||
|
for (int i = 0; i < numPerDay; i++) {
|
||||||
|
int idx = m * (i + 1) - 1;
|
||||||
|
Map<String, Object> item = list.get(idx);
|
||||||
|
newlist.add(item);
|
||||||
|
}
|
||||||
|
list.clear();
|
||||||
|
list.addAll(newlist);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue