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;

  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java练手小项目实现一个项目管理系统

    Java练手小项目实现一个项目管理系统

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用Java实现一个项目管理系统,大家可以在过程中查缺补漏,提升水平
    2021-10-10
  • Idea 配置国内 Maven 源的图文教程

    Idea 配置国内 Maven 源的图文教程

    这篇文章主要介绍了Idea 配置国内 Maven 源的教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-11-11
  • SpringBoot如何指定某些类优先启动

    SpringBoot如何指定某些类优先启动

    这篇文章主要介绍了SpringBoot如何指定某些类优先启动,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Spring AI + 混元带你实现企业级稳定可部署的AI业务智能体

    Spring AI + 混元带你实现企业级稳定可部署的AI业务智能体

    我们深入探讨了Spring AI在智能体构建中的实际应用,特别是在企业环境中的价值与效能,通过逐步实现一个本地部署的智能体解决方案,我们不仅展示了Spring AI的灵活性与易用性,还强调了它在推动AI技术与业务深度融合方面的潜力,感兴趣的朋友一起看看吧
    2024-11-11
  • SpringBoot实现elasticsearch索引操作的代码示例

    SpringBoot实现elasticsearch索引操作的代码示例

    这篇文章主要给大家介绍了SpringBoot如何实现elasticsearch 索引操作,文中有详细的代码示例,感兴趣的同学可以参考阅读下
    2023-07-07
  • SpringMVC中的@RequestMapping注解解析

    SpringMVC中的@RequestMapping注解解析

    这篇文章主要介绍了SpringMVC中的@RequestMapping注解解析,SpringMVC使用@RequestMapping注解为控制器指定可以处理哪些 URL 请求,在控制器的类定义及方法定义处都可标注@RequestMapping,需要的朋友可以参考下
    2023-12-12
  • Java静态代理和动态代理的深入讲解

    Java静态代理和动态代理的深入讲解

    这篇文章主要给大家介绍了关于Java静态代理和动态代理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • java 实现获取指定位置后的第一个数字

    java 实现获取指定位置后的第一个数字

    这篇文章主要介绍了java 实现获取指定位置后的第一个数字,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Java并发编程之Semaphore(信号量)详解及实例

    Java并发编程之Semaphore(信号量)详解及实例

    这篇文章主要介绍了Java并发编程之Semaphore(信号量)详解及实例的相关资料,需要的朋友可以参考下
    2017-06-06
  • java学习之JasperReport踩坑

    java学习之JasperReport踩坑

    本篇文章介绍的是在JAVA学习中JasperReport遇到的坑以及解决办法,有需要的朋友参考下吧。
    2018-01-01

最新评论