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;

    }
  • 相关阅读:
    大神总结的
    更改Xcode的缺省公司名
    iPhone分辨率
    iOS 的 APP 如何适应 iPhone 5s/6/6Plus 三种屏幕的尺寸?
    storyBoard(tableViewl)
    storyBoard
    XIB可视化编程
    UITableView(五)
    UITableView(四)
    UITableView(三)
  • 原文地址:https://www.cnblogs.com/bt2882/p/13086701.html
Copyright © 2011-2022 走看看