根據多個屬性對數據去重(時間取年月日)

前言

最近在項目中遇到了一個比較麻煩的需求,需要根據多個字段對一個實體進行去重,而去重的字段中有一個時間,需要取一天的數據,而數據庫中存的日期有時分秒,這個時候我們要對時間處理之後再去重。

實現方法

使用的技術是java8

    public static final String YEAR = "yyyy-MM-dd";
    
 /**
     * 日期格式化成日期
     *
     * @param date   日期
     * @param format 格式化
     * @return 日期
     */
public static Date dateToDate(Date date, String format) {
        if (format != null && !"".equals(format)) {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            try {
                String strDate = sdf.format(date);
                date = sdf.parse(strDate);
            } catch (ParseException e) {
                date = null;
                e.printStackTrace();
            }
        }

        return date;
    }

// 查數據庫,我使用的是jpa,這裏可以換成具體的業務中
List<Alarm> alarmList = alarmRepository.findByIsExcessive(true);
// 每個排口同一天只顯示一條記錄
alarmList = alarmList.stream().collect(
                    Collectors.collectingAndThen(Collectors.toCollection(
                            () -> new TreeSet<>(Comparator.comparing(o ->
                                    o.getStationName() + dateToDate(o.getAlarmedAt(),
                                            DateExtendUtil.YEAR)))), ArrayList::new));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章