2019年10月11日 09:40:23更新:按起始日期查数据库连续住院信息的解决办法
lambda表达式解决java后台分组排序过程解析

更新于:2019年10月11日,上午9点40分23秒,撰文者为德邦的总负责人。
本文重点阐述了如何运用lambda表达式在Java后端实现分组与排序的详细解析,文中通过具体的示例代码进行了详尽的讲解,对于读者在学习和工作中具有显著的借鉴意义,有需求的朋友不妨查阅一番。
需求:按照起始日期查询出数据库里一段连续日期的住院信息。
数据库中储存的病人住院资料或许并不周全,换言之,在所提供的具体时间段内,可能仅有部分日期的记录,而某些特定日期的信息则未包含在内。
解决:
1.需要我们先按日期分组查出数据库里有的数据;
接着,对日期进行逐一检查,对于那些不存在的日期,将其作为键值,并将对应的值设为空,然后加入到集合中。
3.对集合里的key即日期进行排序。
注:这里分组和排序都用JDK8的新特性lambda表达式
/** * * @param startTime 开始时间 * @param endTime 结束时间 请传入一个示例对象,用于执行订单,并支持条件模糊搜索。 * @return 结果集 * @throws ParseException 转换异常 */ private Map获取列表映射,参数包括:可选的起始时间字符串`startTime`,可选的结束时间字符串`endTime`,以及`TBOrderExecutionExample`对象,在解析过程中可能抛出`ParseException`异常。 List 获取结果列表的操作是通过调用tbDocOrderAdmissionService的selectByExample方法,并传入tbOrderExecutionExample参数来实现的。 //获取时间段分组 创建了一个名为sdf2的SimpleDateFormat对象,其格式设置为“年-月-日”。 List DateRangUtil函数被调用来获取所有日期,所需参数包括起始时间和结束时间,执行后返回的日期列表存储在lists变量中。 Map 将列表中的数据流进行分组,按照“sdf2”格式化后的“yzjhksrq”字段值进行分类,并最终收集成列表。 Set keys = map.keySet(); Map > finalMap = map; lists.forEach(ele -> { if (!keys.contains(ele)) { finalMap.put(ele, null); } }); Map finalMaps对象被创建,其类型为LinkedHashMap。<>(); Set strings = finalMap.keySet(); List dates = new ArrayList<>(strings); DateTimeFormatter 对象 formatter 被创建,其格式化模式设定为 "yyyy-MM-dd"。 Collections对dates进行排序,采用了一个新的Comparator对象。 () { 定义了一个名为f的DateFormat对象,采用SimpleDateFormat类,并设置了日期格式为“年-月-日”。 @Override 此函数旨在对两个字符串对象进行比较,返回一个整数,用以指示第一个字符串在字典顺序上的相对位置。 try { 执行f对o1的解析,并将结果与f对o2的解析结果进行比较; } catch (ParseException e) { 抛出非法参数异常,具体信息为:e; } } }); dates.forEach(ele -> { 对finalMap中的每个键值对,进行遍历处理,执行以下操作: if (key.equals(ele)) { finalMaps.put(ele, value); } }); }); return finalMaps; }
下面贴出生成给定起始日期生成连续日期的代码:
public static List获取指定时间范围内的所有数据(start为起始时间,end为结束时间),若解析过程中出现异常,则抛出ParseException异常。 List lDate = new ArrayList<>(); 创建了一个SimpleDateFormat对象sdf,其格式设定为“年-月-日”。 日期变量dBegin通过sdf解析方法从start字符串中转换得到。 Date dEnd = sdf.parse(end); lDate.add(dBegin); 创建一个Calendar对象calBegin,该对象通过调用getInstance()方法获取当前日期和时间。 根据提供的日期信息,对日历进行时间设定。 calBegin.setTime(dBegin); 创建了一个日历对象calEnd,该对象通过调用getInstance()方法从当前时间创建。 // 使用给定的 Date 设置此 Calendar 的时间 calEnd.setTime(dEnd); // 测试此日期是否在指定日期之后 当(dEnd的时间晚于calBegin的时间)时,{ 依照日历的既定法则,对指定的日历数据字段进行相应的时间增加或减少操作。 calBegin日期加一天; 日期列表中添加了起始日期的时间戳。 } List allDate = new ArrayList<>(); 遍历lDate数组中的每个元素,将其格式化后,逐一添加到allDate集合中。 return allDate; }
本文内容至此结束,衷心希望它能对各位读者的学习带来益处,同时我们也期待着大家能够继续给予脚本之家更多的支持与厚爱。