lambda表达式解决java后台分组排序过程解析
更新时间:2019年10月11日 09:40:23 作者:德邦总管
这篇文章主要介绍了lambda表达式解决java后台分组排序过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
需求:按照起始日期查询出数据库里一段连续日期的住院信息。
问题:数据库里的住院信息可能不是完整的,也就是在给出的日期区间里只有若干天的数据,缺少某些日期的数据。
解决:
1.需要我们先按日期分组查出数据库里有的数据;
2.然后遍历日期,将不存在的日期以日期为key,value为null插入集合里;
3.对集合里的key即日期进行排序。
注:这里分组和排序都用JDK8的新特性lambda表达式
/** * * @param startTime 开始时间 * @param endTime 结束时间 * @param tbOrderExecutionExample 模糊查询 * @return 结果集 * @throws ParseException 转换异常 */ 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); //获取时间段分组 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; }
下面贴出生成给定起始日期生成连续日期的代码:
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 设置此 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<String> allDate = new ArrayList<>(); lDate.forEach(ele -> allDate.add(sdf.format(ele))); return allDate; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
spring boot使用WebClient调用HTTP服务代码示例
这篇文章主要介绍了spring boot使用WebClient调用HTTP服务代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2019-12-12手写redis@Cacheable注解 支持过期时间设置方式
这篇文章主要介绍了手写redis@Cacheable注解 支持过期时间设置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-01-01java开发之SQL语句中DATE_FORMAT函数举例详解
要将日期值格式化为特定格式,请使用DATE_FORMAT函数,下面这篇文章主要给大家介绍了关于java开发之SQL语句中DATE_FORMAT函数的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下2024-05-05
最新评论