zoukankan      html  css  js  c++  java
  • java 8 递归 并且根据某个字段排序

    1.实体bean结构
    public class DmpDictVo {
    @ApiModelProperty(value = "数据id")
    private String id;

    @ApiModelProperty(value = "父id")
    private String pid;

    @ApiModelProperty(value = "描述")
    private String name;

      //初始化 children 避免报空指针异常
        List<DmpDictVo> children = new ArrayList<>();
    }


    // 根据自己的业务编写
    private List<DmpDictVo> searchFatherDmpDict() {
     // 查询出所有的数据字典
    List<QaCategoryVo> qaCategoryVoList = findAll(type);
    // 递归封装数据

    return makeTree(qaCategoryVoList, -1L);
    
    
    }


    /**
    * 递归方法构造
    */

    private List<QaCategoryVo> makeTree(List<QaCategoryVo> departmentList, Long pId) {

    //子类
    List<QaCategoryVo> children = departmentList.stream().filter(x -> x.getPid().equals(pId)).collect(Collectors.toList());
    // 排序
    children = children.stream().sorted(Comparator.comparing(QaCategoryVo::getSort, Comparator.nullsLast(Integer::compareTo)).reversed()).collect(Collectors.toList());
      
    if(children.isEmpty()){
    return null;
    }
    //后辈中的非子类
    List<QaCategoryVo> successor = departmentList.stream().filter(x -> !x.getPid().equals(pId)).collect(Collectors.toList());

    for (QaCategoryVo x : children) {
    List<QaCategoryVo> qaCategoryVos = makeTree(successor, x.getId());
    x.setChildren(qaCategoryVos);
    }
    return children;

    }
  • 相关阅读:
    SDN概述
    Linux企业运维人员必备150个命令汇总
    自动化运维工具puppet详解(二)
    自动化运维工具puppet详解(一)
    自动化运维工具[ansible详解三]
    ansible 常用模块
    自动化运维工具【ansible详解 二】
    A. Cinema Line
    A. Wrong Subtraction
    A. The number of positions
  • 原文地址:https://www.cnblogs.com/bt2882/p/13086701.html
Copyright © 2011-2022 走看看