lambda表達式解決java后臺分組排序過程解析
更新時間:2019年10月11日 09:40:23 作者:德邦總管
這篇文章主要介紹了lambda表達式解決java后臺分組排序過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
需求:按照起始日期查詢出數據庫里一段連續(xù)日期的住院信息。
問題:數據庫里的住院信息可能不是完整的,也就是在給出的日期區(qū)間里只有若干天的數據,缺少某些日期的數據。
解決:
1.需要我們先按日期分組查出數據庫里有的數據;
2.然后遍歷日期,將不存在的日期以日期為key,value為null插入集合里;
3.對集合里的key即日期進行排序。
注:這里分組和排序都用JDK8的新特性lambda表達式
/** * * @param startTime 開始時間 * @param endTime 結束時間 * @param tbOrderExecutionExample 模糊查詢 * @return 結果集 * @throws ParseException 轉換異常 */ private Map<String, List<TBOrderExecution>> getListMap(@RequestParam(value = "startTime", required = false) String startTime, @RequestParam(value = "endTime", required = false) String endTime, TBOrderExecutionExample tbOrderExecutionExample) throws ParseException { List<TBOrderExecution> list = tbDocOrderAdmissionService.selectByExample(tbOrderExecutionExample); //獲取時間段分組 SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd"); List<String> lists = DateRangUtil.getAllDate(startTime, endTime); Map<String, List<TBOrderExecution>> map = list.stream().collect(Collectors.groupingBy(x -> sdf2.format(x.getYzjhksrq()))); Set<String> keys = map.keySet(); Map<String, List<TBOrderExecution>> finalMap = map; lists.forEach(ele -> { if (!keys.contains(ele)) { finalMap.put(ele, null); } }); Map<String, List<TBOrderExecution>> finalMaps = new LinkedHashMap<>(); Set<String> strings = finalMap.keySet(); List<String> dates = new ArrayList<>(strings); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); Collections.sort(dates, new Comparator<String>() { DateFormat f = new SimpleDateFormat("yyyy-MM-dd"); @Override public int compare(String o1, String o2) { try { return f.parse(o1).compareTo(f.parse(o2)); } catch (ParseException e) { throw new IllegalArgumentException(e); } } }); dates.forEach(ele -> { finalMap.forEach((key, value) -> { if (key.equals(ele)) { finalMaps.put(ele, value); } }); }); return finalMaps; }
下面貼出生成給定起始日期生成連續(xù)日期的代碼:
public static List<String> getAllDate(String start, String end) throws ParseException { List<Date> lDate = new ArrayList<>(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date dBegin = sdf.parse(start); Date dEnd = sdf.parse(end); lDate.add(dBegin); Calendar calBegin = Calendar.getInstance(); // 使用給定的 Date 設置此 Calendar 的時間 calBegin.setTime(dBegin); Calendar calEnd = Calendar.getInstance(); // 使用給定的 Date 設置此 Calendar 的時間 calEnd.setTime(dEnd); // 測試此日期是否在指定日期之后 while (dEnd.after(calBegin.getTime())) { // 根據日歷的規(guī)則,為給定的日歷字段添加或減去指定的時間量 calBegin.add(Calendar.DAY_OF_MONTH, 1); lDate.add(calBegin.getTime()); } List<String> allDate = new ArrayList<>(); lDate.forEach(ele -> allDate.add(sdf.format(ele))); return allDate; }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
spring boot使用WebClient調用HTTP服務代碼示例
這篇文章主要介紹了spring boot使用WebClient調用HTTP服務代碼示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-12-12使用springboot+druid雙數據源動態(tài)配置操作
這篇文章主要介紹了使用springboot+druid雙數據源動態(tài)配置的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09手寫redis@Cacheable注解?支持過期時間設置方式
這篇文章主要介紹了手寫redis@Cacheable注解?支持過期時間設置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01java開發(fā)之SQL語句中DATE_FORMAT函數舉例詳解
要將日期值格式化為特定格式,請使用DATE_FORMAT函數,下面這篇文章主要給大家介紹了關于java開發(fā)之SQL語句中DATE_FORMAT函數的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-05-05