根据某字段获取上周,本周,本月,本季度,本年,总数据的通用方法
注:
具体使用
List<BasicInfo> lastWeekScope = lastWeekScope(basicInfoList, "createTime", BasicInfo.class);
List<BasicInfo> thisWeekScope = thisWeekScope(basicInfoList, "createTime", BasicInfo.class);
List<BasicInfo> thisMonthScope = thisMonthScope(basicInfoList, "createTime",BasicInfo.class);
List<BasicInfo> thisYearScope = thisYearScope(basicInfoList, "createTime",BasicInfo.class);
List<BasicInfo> totalScope = totalScope(basicInfoList, "createTime", BasicInfo.class);
通用方法具体实现
/**
* 上周
* @param basicInfoStream 需要处理的列表数据
* @param restrict 限制条件
* @return
*/
protected <T> List<T> lastWeekScope(Object basicInfoStream, String restrict, Class<T> clazz){
DateRange lastWeek = DateUtils.getLastWeek();
JSONConfig jsonConfig = JSONConfig.create();
jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
String toJsonStr = JSONUtil.toJsonStr(basicInfoStream,jsonConfig);
JSONArray jsonArray = JSONUtil.parseArray(toJsonStr);
jsonArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getDate(restrict)).reversed());
List<Object> objectList = jsonArray.stream().filter(obj -> {
JSONObject object = (JSONObject) obj;
Date date = object.getDate(restrict);
if (date.after(lastWeek.getStart()) && date.before(lastWeek.getEnd())) return true;
return false;
}).collect(Collectors.toList());
return objectList.stream()
.map(entity -> JSONUtil.toBean(JSONUtil.parseObj(entity), clazz))
.collect(Collectors.toList());
}
/**
* 本周
*/
protected <T> List<T> thisWeekScope(Object basicInfoStream, String restrict, Class<T> clazz){
DateRange thisWeek = DateUtils.getThisWeek();
JSONConfig jsonConfig = JSONConfig.create();
jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
String toJsonStr = JSONUtil.toJsonStr(basicInfoStream,jsonConfig);
JSONArray jsonArray = JSONUtil.parseArray(toJsonStr);
jsonArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getDate(restrict)).reversed());
List<Object> objectList = jsonArray.stream().filter(obj -> {
JSONObject object = (JSONObject) obj;
Date date = object.getDate(restrict);
if (date.after(thisWeek.getStart()) && date.before(thisWeek.getEnd())) return true;
return false;
}).collect(Collectors.toList());
return objectList.stream()
.map(entity -> JSONUtil.toBean(JSONUtil.parseObj(entity), clazz))
.collect(Collectors.toList());
}
/**
* 本月
*/
protected <T> List<T> thisMonthScope(Object basicInfoStream, String restrict, Class<T> clazz){
DateRange thisMonth = DateUtils.getThisMonth();
JSONConfig jsonConfig = JSONConfig.create();
jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
String toJsonStr = JSONUtil.toJsonStr(basicInfoStream,jsonConfig);
JSONArray jsonArray = JSONUtil.parseArray(toJsonStr);
jsonArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getDate(restrict)).reversed());
List<Object> objectList = jsonArray.stream().filter(obj -> {
JSONObject object = (JSONObject) obj;
Date date = object.getDate(restrict);
if (date.after(thisMonth.getStart()) && date.before(thisMonth.getEnd())) return true;
return false;
}).collect(Collectors.toList());
return objectList.stream()
.map(entity -> JSONUtil.toBean(JSONUtil.parseObj(entity), clazz))
.collect(Collectors.toList());
}
/**
* 本季度
*/
protected <T> List<T> thisQuarterScope(Object basicInfoStream, String restrict, Class<T> clazz){
DateRange thisQuarter = DateUtils.getThisQuarter();
JSONConfig jsonConfig = JSONConfig.create();
jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
String toJsonStr = JSONUtil.toJsonStr(basicInfoStream,jsonConfig);
JSONArray jsonArray = JSONUtil.parseArray(toJsonStr);
jsonArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getDate(restrict)).reversed());
List<Object> objectList = jsonArray.stream().filter(obj -> {
JSONObject object = (JSONObject) obj;
Date date = object.getDate(restrict);
if (date.after(thisQuarter.getStart()) && date.before(thisQuarter.getEnd())) return true;
return false;
}).collect(Collectors.toList());
return objectList.stream()
.map(entity -> JSONUtil.toBean(JSONUtil.parseObj(entity), clazz))
.collect(Collectors.toList());
}
/**
* 本年
*/
protected <T> List<T> thisYearScope(Object basicInfoStream, String restrict, Class<T> clazz){
DateRange thisYear = DateUtils.getThisYear();
JSONConfig jsonConfig = JSONConfig.create();
jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
String toJsonStr = JSONUtil.toJsonStr(basicInfoStream,jsonConfig);
JSONArray jsonArray = JSONUtil.parseArray(toJsonStr);
jsonArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getDate(restrict)).reversed());
List<Object> objectList = jsonArray.stream().filter(obj -> {
JSONObject object = (JSONObject) obj;
Date date = object.getDate(restrict);
if (date.after(thisYear.getStart()) && date.before(thisYear.getEnd())) return true;
return false;
}).collect(Collectors.toList());
return objectList.stream()
.map(entity -> JSONUtil.toBean(JSONUtil.parseObj(entity), clazz))
.collect(Collectors.toList());
}
/**
* 总
*/
protected <T> List<T> totalScope(Object basicInfoStream, String restrict, Class<T> clazz){
JSONConfig jsonConfig = JSONConfig.create();
jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
String toJsonStr = JSONUtil.toJsonStr(basicInfoStream,jsonConfig);
JSONArray jsonArray = JSONUtil.parseArray(toJsonStr);
jsonArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getDate(restrict)).reversed());
List<Object> objectList = jsonArray.stream().collect(Collectors.toList());
return objectList.stream()
.map(entity -> JSONUtil.toBean(JSONUtil.parseObj(entity), clazz))
.collect(Collectors.toList());
}
获取时间范围通用类
DateUtils.java
/**
* 日期格式yyyy-MM-dd
*/
public static String PATTEN_YMD = "yyyy-MM-dd";
/**
* 获取当周的时间范围
* @return
*/
public static DateRange getThisWeek(){
Calendar startCalendar = Calendar.getInstance();
// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
startCalendar.setFirstDayOfWeek(Calendar.MONDAY);
// 获得当前日期是一个星期的第几天
int dayWeek = startCalendar.get(Calendar.DAY_OF_WEEK);
if(dayWeek==1){
dayWeek = 8;
}
startCalendar.add(Calendar.DATE, startCalendar.getFirstDayOfWeek() - dayWeek);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
setMinTime(startCalendar);
Date startCalendarTime = startCalendar.getTime();
startCalendar.add(Calendar.DATE, 4 + startCalendar.getFirstDayOfWeek());
setMaxTime(startCalendar);
return new DateRange(startCalendarTime, startCalendar.getTime());
}
/**
* 获取上周的时间范围
* @return
*/
public static DateRange getLastWeek(){
String beginDayOfLastWeek = getFromToDate(sdf, new Date(), 1, 0, 1);
Date lastDate = string2Date(beginDayOfLastWeek, PATTEN_YMD);
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(lastDate);
// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
startCalendar.setFirstDayOfWeek(Calendar.MONDAY);
// 获得当前日期是一个星期的第几天
int dayWeek = startCalendar.get(Calendar.DAY_OF_WEEK);
if(dayWeek==1){
dayWeek = 8;
}
startCalendar.add(Calendar.DATE, startCalendar.getFirstDayOfWeek() - dayWeek);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
setMinTime(startCalendar);
Date startCalendarTime = startCalendar.getTime();
startCalendar.add(Calendar.DATE, 4 + startCalendar.getFirstDayOfWeek());
setMaxTime(startCalendar);
return new DateRange(startCalendarTime, startCalendar.getTime());
}
/**
* 获取当前月份的时间范围
* @return
*/
public static DateRange getThisMonth(){
Calendar startCalendar = Calendar.getInstance();
startCalendar.set(Calendar.DAY_OF_MONTH, 1);
setMinTime(startCalendar);
Calendar endCalendar = Calendar.getInstance();
endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
setMaxTime(endCalendar);
return new DateRange(startCalendar.getTime(), endCalendar.getTime());
}
/**
* 获取当前季度的时间范围
* @return current quarter
*/
public static DateRange getThisQuarter() {
Calendar startCalendar = Calendar.getInstance();
startCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3) * 3);
startCalendar.set(Calendar.DAY_OF_MONTH, 1);
setMinTime(startCalendar);
Calendar endCalendar = Calendar.getInstance();
endCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3) * 3 + 2);
endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
setMaxTime(endCalendar);
return new DateRange(startCalendar.getTime(), endCalendar.getTime());
}
/**
* 获取当前年的时间范围
* @return current year
*/
public static DateRange getThisYear() {
Calendar startCalendar = Calendar.getInstance();
startCalendar.set(Calendar.DAY_OF_YEAR, 1);
setMinTime(startCalendar);
Calendar endCalendar = Calendar.getInstance();
endCalendar.set(Calendar.DAY_OF_YEAR, endCalendar.getActualMaximum(Calendar.DAY_OF_YEAR));
setMaxTime(endCalendar);
return new DateRange(startCalendar.getTime(), endCalendar.getTime());
}
/**
* 获取上年的时间范围
* @return
*/
public static DateRange getLastYear(){
Calendar startCalendar = Calendar.getInstance();
startCalendar.add(Calendar.YEAR, -1);
startCalendar.set(Calendar.DAY_OF_YEAR, 1);
setMinTime(startCalendar);
Calendar endCalendar = Calendar.getInstance();
endCalendar.add(Calendar.YEAR, -1);
endCalendar.set(Calendar.DAY_OF_YEAR, endCalendar.getActualMaximum(Calendar.DAY_OF_YEAR));
setMaxTime(endCalendar);
return new DateRange(startCalendar.getTime(), endCalendar.getTime());
}
/**
* 获取date的月份的时间范围
* @param date
* @return
*/
public static DateRange getMonthRange(Date date) {
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(date);
startCalendar.set(Calendar.DAY_OF_MONTH, 1);
setMaxTime(startCalendar);
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(date);
endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
setMaxTime(endCalendar);
return new DateRange(startCalendar.getTime(), endCalendar.getTime());
}
/**
* 获取昨天的时间范围
* @return
*/
public static DateRange getYesterdayRange() {
Calendar startCalendar = Calendar.getInstance();
startCalendar.add(Calendar.DAY_OF_MONTH, -1);
setMinTime(startCalendar);
Calendar endCalendar = Calendar.getInstance();
endCalendar.add(Calendar.DAY_OF_MONTH, -1);
setMaxTime(endCalendar);
return new DateRange(startCalendar.getTime(), endCalendar.getTime());
}
/**
* 获取上个月的时间范围
* @return
*/
public static DateRange getLastMonth(){
Calendar startCalendar = Calendar.getInstance();
startCalendar.add(Calendar.MONTH, -1);
startCalendar.set(Calendar.DAY_OF_MONTH, 1);
setMinTime(startCalendar);
Calendar endCalendar = Calendar.getInstance();
endCalendar.add(Calendar.MONTH, -1);
endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
setMaxTime(endCalendar);
return new DateRange(startCalendar.getTime(), endCalendar.getTime());
}
private static void setMinTime(Calendar calendar){
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
}
private static void setMaxTime(Calendar calendar){
calendar.set(Calendar.HOUR_OF_DAY, calendar.getActualMaximum(Calendar.HOUR_OF_DAY));
calendar.set(Calendar.MINUTE, calendar.getActualMaximum(Calendar.MINUTE));
calendar.set(Calendar.SECOND, calendar.getActualMaximum(Calendar.SECOND));
calendar.set(Calendar.MILLISECOND, calendar.getActualMaximum(Calendar.MILLISECOND));
}
/**
* 根据当前日期获得最近n周的日期区间(不包含本周)
* @param sdf 日期格式
* @param date 日期
* @param n 日期
* @param option 0为一周开始日期,不为0则为一周结束时间
* @param k 日期
*/
public static String getFromToDate(SimpleDateFormat sdf, Date date, Integer n, Integer option, Integer k) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int dayWeek = calendar.get(Calendar.DAY_OF_WEEK);
if(dayWeek==1) dayWeek = 8;
int dayOfWeek = dayWeek - 1;
int offset = 0 == option ? 1 - dayOfWeek : 7 - dayOfWeek;
int amount = 0 == option ? offset - (n - 1 + k) * 7 : offset - k * 7;
calendar.add(Calendar.DATE, amount);
return sdf.format(calendar.getTime());
}
public static Date string2Date(String time, String pattern) {
try {
return getDateParser(pattern).parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* 获取SimpleDateFormat
*
* @param pattern
* @return
*/
private static SimpleDateFormat getDateParser(String pattern) {
return new SimpleDateFormat(pattern);
}