lambda表达式解决java后台分组排序过程解析

网友投稿 405 2022-12-25


lambda表达式解决java后台分组排序过程解析

需求:按照起始日期查询出数据库里一段连续日期的住院信息。

问题:数据库里的住院信息可能不是完整的,也就是在给出的日期区间里只有若干天的数据,缺少某些日期的数据。

解决:

1.需要我们先按日期分组查出数据库里有的数据;

2.然后遍历日期,将不存在的日期以日期为key,value为null插入集合里;

3.对集合里的key即日期进行排序。

注:这里分组和排序都用JDK8的新特性lambda表达式

/**

*

* @param startTime 开始时间

* @param endTime 结束时间

* @param tbOrderExecutionExample 模糊查询

* @return 结果集

* @throws ParseException 转换异常

*/

private Map> getListMap(@RequestParam(value = "startTime", required = false) String startTime, @RequestParam(value = "endTime", required = false) String endTime, TBOrderExecutionExample tbOrderExecutionExample) throws ParseException {

List list = tbDocOrderAdmissionService.selectByExample(tbOrderExecutionExample);

//获取时间段分组

SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");

List lists = DateRangUtil.getAllDate(startTime, endTime);

Map> map = list.stream().collMGxqIgect(Collectors.groupingBy(x -> sdf2.format(x.getYzjhksrq())));

Set keys = map.keySet();

Map> finalMap = map;

lists.forEach(ele -> {

if (!keys.contains(ele)) {

finalMap.put(ele, null);

}

});

Map> finalMaps = new LinkedHashMap<>();

Set strings = finalMap.keySet();

List dates = new ArrayList<>(strings);

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

Collections.sort(dates, new Comparator() {

DateFormat f = new SimpleDateFormat("yyyy-MM-dd");

@OverMGxqIgride

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;

}

下面贴出生成给定起始日期生成连续日期的代码:

public static List getAMGxqIgllDate(String start, String end) throws ParseException {

List lDate = new ArrayList<>();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

Date dBegin = sdf.parse(start);

Date dEnd = sdf.parse(end);

http:// 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())) {

// 根据日历的规则,为给定的日历字段添加或减去指定的时间量

calBegin.add(Calendar.DAY_OF_MONTH, 1);

lDate.add(calBegin.getTime());

}

List allDate = new ArrayList<>();

lDate.forEach(ele -> allDate.add(sdf.format(ele)));

return allDate;

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:主流api测试工具(在线api测试工具)
下一篇:实现 Java 本地缓存的方法解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~