小編給大家分享一下lambda表達(dá)式如何解決java后臺(tái)分組排序,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)-云計(jì)算及IDC服務(wù)提供商,涵蓋公有云、IDC機(jī)房租用、德陽(yáng)電信服務(wù)器托管、等保安全、私有云建設(shè)等企業(yè)級(jí)互聯(lián)網(wǎng)基礎(chǔ)服務(wù),歡迎咨詢(xún):18980820575
需求:按照起始日期查詢(xún)出數(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 模糊查詢(xún) * @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; }
以上是“l(fā)ambda表達(dá)式如何解決java后臺(tái)分組排序”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)站標(biāo)題:lambda表達(dá)式如何解決java后臺(tái)分組排序
本文網(wǎng)址:http://www.rwnh.cn/article30/jgpgpo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、網(wǎng)站維護(hù)、服務(wù)器托管、做網(wǎng)站、商城網(wǎng)站、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)