lambda表達(dá)式解決java后臺(tái)分組排序過(guò)程解析
需求:按照起始日期查詢出數(shù)據(jù)庫(kù)里一段連續(xù)日期的住院信息。
問(wèn)題:數(shù)據(jù)庫(kù)里的住院信息可能不是完整的,也就是在給出的日期區(qū)間里只有若干天的數(shù)據(jù),缺少某些日期的數(shù)據(jù)。
解決:
1.需要我們先按日期分組查出數(shù)據(jù)庫(kù)里有的數(shù)據(jù);
2.然后遍歷日期,將不存在的日期以日期為key,value為null插入集合里;
3.對(duì)集合里的key即日期進(jìn)行排序。
注:這里分組和排序都用JDK8的新特性lambda表達(dá)式
/** * * @param startTime 開(kāi)始時(shí)間 * @param endTime 結(jié)束時(shí)間 * @param tbOrderExecutionExample 模糊查詢 * @return 結(jié)果集 * @throws ParseException 轉(zhuǎn)換異常 */ 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); //獲取時(shí)間段分組 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 設(shè)置此 Calendar 的時(shí)間 calBegin.setTime(dBegin); Calendar calEnd = Calendar.getInstance(); // 使用給定的 Date 設(shè)置此 Calendar 的時(shí)間 calEnd.setTime(dEnd); // 測(cè)試此日期是否在指定日期之后 while (dEnd.after(calBegin.getTime())) { // 根據(jù)日歷的規(guī)則,為給定的日歷字段添加或減去指定的時(shí)間量 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; }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springboot配置http跳轉(zhuǎn)https的過(guò)程
SSL是為網(wǎng)絡(luò)通信提供安全以及保證數(shù)據(jù)完整性的的一種安全協(xié)議,SSL在網(wǎng)絡(luò)傳輸層對(duì)網(wǎng)絡(luò)連接進(jìn)行加密,這篇文章主要介紹了springboot配置http跳轉(zhuǎn)https的過(guò)程,需要的朋友可以參考下2023-04-04spring boot使用WebClient調(diào)用HTTP服務(wù)代碼示例
這篇文章主要介紹了spring boot使用WebClient調(diào)用HTTP服務(wù)代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12使用springboot+druid雙數(shù)據(jù)源動(dòng)態(tài)配置操作
這篇文章主要介紹了使用springboot+druid雙數(shù)據(jù)源動(dòng)態(tài)配置的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09手寫redis@Cacheable注解?支持過(guò)期時(shí)間設(shè)置方式
這篇文章主要介紹了手寫redis@Cacheable注解?支持過(guò)期時(shí)間設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01java開(kāi)發(fā)之SQL語(yǔ)句中DATE_FORMAT函數(shù)舉例詳解
要將日期值格式化為特定格式,請(qǐng)使用DATE_FORMAT函數(shù),下面這篇文章主要給大家介紹了關(guān)于java開(kāi)發(fā)之SQL語(yǔ)句中DATE_FORMAT函數(shù)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-05-05Java編程通過(guò)list接口實(shí)現(xiàn)數(shù)據(jù)的增刪改查代碼示例
這篇文章是介紹Java編程基礎(chǔ)方面的內(nèi)容,涉及l(fā)ist接口的操作,通過(guò)list接口實(shí)現(xiàn)對(duì)數(shù)據(jù)的增刪改查的相關(guān)代碼,具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10swagger?@ApiModel添加實(shí)體類不生效的解決
這篇文章主要介紹了swagger?@ApiModel添加實(shí)體類不生效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。2022-01-01