java根据某字段获取上周,本周,本月,本季度,本年,总数据的通用方法

根据某字段获取上周,本周,本月,本季度,本年,总数据的通用方法
注:
具体使用

  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);
    }
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java集合中可以根据字段获取数据方法有很多,以下是其中两种常用的方法: 1.使用Map集合 可以将每个对象的属性名和属性值存储在一个Map中,然后将这个Map作为元素存储在List中。这样,就可以通过遍历List,再通过Map的get方法根据属性名获取属性值。 举个例子,假设有一个User类,其中包含id和name两个属性,现在有一个List<User> users,我们可以将其转换为List<Map<String, Object>>,然后根据属性名获取属性值,代码如下: ```java List<Map<String, Object>> list = new ArrayList<>(); for (User user : users) { Map<String, Object> map = new HashMap<>(); map.put("id", user.getId()); map.put("name", user.getName()); list.add(map); } // 根据属性名获取属性值 for (Map<String, Object> map : list) { System.out.println(map.get("id")); System.out.println(map.get("name")); } ``` 2.使用Comparator实现定制比较 如果要根据某个属性排序,可以使用Comparator实现定制比较。具体来说,可以新建一个TreeMap,并传入一个Comparator对象,该对象的compare方法根据指定的属性进行比较。 举个例子,假设有一个Student类,其中包含stuNo和name两个属性,现在有一个List<Student> students,我们可以根据stuNo进行排序,代码如下: ```java // 新建集合 TreeMap TreeMap<Student, String> treemap = new TreeMap<>(new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { int n1 = o1.getStuNo() - o2.getStuNo(); return n1;// 只根据学号比较 } }); // 将List中的元素添加到TreeMap中 for (Student student : students) { treemap.put(student, ""); } // 遍历TreeMap,即可根据stuNo进行排序 for (Student student : treemap.keySet()) { System.out.println(student.getStuNo()); System.out.println(student.getName()); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值