前言
最近在項目中遇到了一個比較麻煩的需求,需要根據多個字段對一個實體進行去重,而去重的字段中有一個時間,需要取一天的數據,而數據庫中存的日期有時分秒,這個時候我們要對時間處理之後再去重。
實現方法
使用的技術是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));