栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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

解决:

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

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

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

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


  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().collect(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");

      @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 getAllDate(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);

    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;

  }

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/136779.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号