• 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;

    }
  • 相关阅读:
    pytesser模块WindowsError错误解决方法
    Django 1.10中文文档-聚合
    Django 1.10中文文档-执行查询
    Python NLP入门教程
    Django1.10中文文档—模型
    曲线点抽稀算法-Python实现
    Python判断文件是否存在的三种方法
    epoll原理
    多线程编程
    后端知识地图
  • 原文地址:https://www.cnblogs.com/bt2882/p/13086701.html
Copyright © 2020-2023  润新知