要件:病院の情報によると、連続データベースの日付の開始日をチェックしてください。
Q:入院患者データベースの情報は、特定の日付からのデータの日数だけ、欠落したデータを、指定した日付範囲で、つまり、完全ではないかもしれません。
ソリューション:
1.私たちは、データベースと、いくつかのデータパケットプレス日付を見つけるために必要があります。
2.次に、値は、コレクションを挿入するヌルである日付の日付をキーとして存在していない、トラバース。
3.キー日付のコレクションをソートすること。
注:このグループ化し、ラムダ式ですべての新機能をソートJDK8
。1 / ** 2 * 3 * @param のstartTimeは、開始時間 。4 * @param endTimeの終了時間 。5 * @param tbOrderExecutionExampleあいまい検索 。6 * @return 結果セット 。7 * @throws はParseException変換例外を 。8 * / 9 プライベート地図<文字列、リスト<TBOrderExecution >> getListMap(@RequestParam(値= "のstartTime" =必須偽)文字列のstartTime、@RequestParam(値= "endTimeは"、=必須偽)文字列endTimeは、tBOrderExecutionExample tbOrderExecutionExample)スローはParseException { 10 リスト<TBOrderExecution>リストに= tbDocOrderAdmissionService.selectByExample(tbOrderExecutionExample)。 11 // 获取时间段分组 12 のSimpleDateFormat sdf2 = 新しいてSimpleDateFormat( "YYYY-MM-DD" )。 13 リストの<string>リスト= DateRangUtil.getAllDate(のstartTime、endTimeは)。 14 地図<文字列リスト<TBOrderExecution >>地図= list.stream()を収集(Collectors.groupingBy(X - > sdf2.format(x.getYzjhksrq())))。 15 セットの<string>キー= map.keySet()。 16 地図<文字列、リスト<TBOrderExecution >>17 lists.forEach(ELE - > { 18 であれば(!keys.contains(ELE)){ 19 finalMap.put(ELE、NULL ); 20 } 21 22 }); 23 地図<文字列、リスト<TBOrderExecution >> finalMaps = 新しいのLinkedHashMap <> (); 24 セットの<string>文字列= finalMap.keySet()。 25 リスト<文字列>日付= 新しい ArrayListを<> (文字列); 26 てDateTimeFormatterフォーマッタ= DateTimeFormatter.ofPattern( "YYYY-MM-DD" )。 27 Collections.sort(日付、新しいコンパレータの<string> (){ 28 にDateFormatのF = 新しいてSimpleDateFormat( "YYYY-MM-DD" ); 29 30 @Override 31 公共 のint 比較(String型O1、文字列O2){ 32 のtry { 33 戻りf.parse(O1).compareTo(f.parse(O2)); 34 } キャッチ(はParseException電子){ 35 投 新しいはIllegalArgumentException(E); 36 } 37 } 38 }); 39 dates.forEach(ELE - > { 40 finalMap.forEach((キー、値) - > { 41 であれば(key.equals(ELE)){ 42 finalMaps.put(ELE、値); 43 } 44 }); 45 }); 46 リターンfinalMaps。 47 }
与えられた開始日コードの下に掲示生成日間連続で発生しました:
1 公共の 静的リストの<string> getAllDate(文字列の開始、文字列の端部)がスローはParseException { 2 一覧<日付> LDATE = 新規のArrayListを<> (); 3 のSimpleDateFormat SDF = 新しいてSimpleDateFormat( "YYYY-MM-DD" )。 4 日dBegin = sdf.parse(開始) 5 日DEND = sdf.parse(エンド)。 6 7 lDate.add(dBegin)。 8 カレンダーcalBegin = Calendar.getInstance(); 9 // 使用给定的日设置此カレンダー的时间 10 calBegin.setTime(dBegin); 11 カレンダーcalend = Calendar.getInstance(); 12である // このカレンダー日付設定された所定の時間 13である calEnd.setTime(DEND); 14 // この日付が指定された日付である場合、テスト後に 15 一方、(dEnd.after(calBegin.getTime())){ 16 // カレンダの規則に従って時間の量は、指定されたカレンダに指定されたフィールドを加算または減算 17。 calBegin.add(Calendar.DAY_OF_MONTH ,. 1 )、 18は LDATE .add(calBegin.getTime()); 19 } 20は、 リストの<string> = allDate 新しい新規のArrayList <> (); 21である lDate.forEach(ELE - >allDate.add(sdf.format(ELE)))。 22 リターンallDate。 23 24 }