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

平级数据处理成树数据工具类

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

平级数据处理成树数据工具类

此工具类支持如下功能点:

1、平级数据递归处理成树数据

2、支持设定子级集合名称

3、支持设定多个排序字段

4、支持返回某个节点下的子级集合树数据

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;

import java.util.Comparator;
import java.util.Optional;
import java.util.stream.Collectors;


public class HandleToTreeUtils {

    
    public static JSonArray handleToTree(JSonArray dataArr){
        JSonArray resultJson = new JSonArray();
        recursionHandleToTree(resultJson,dataArr,null,null);
        return resultJson;
    }

    
    public static JSonArray handleToTree(JSonArray dataArr,String curId){
        JSonArray resultJson = new JSonArray();
        recursionHandleToTree(resultJson,dataArr,curId,null);
        return resultJson;
    }

    
    public static JSonArray handleToTree(JSonArray dataArr,Object... sortObjs){
        JSonArray resultJson = new JSonArray();
        recursionHandleToTree(resultJson,dataArr,null,null,sortObjs);
        return resultJson;
    }

    
    public static JSonArray handleToTree(JSonArray dataArr,String curId,String childsName){
        JSonArray resultJson = new JSonArray();
        recursionHandleToTree(resultJson,dataArr,curId,childsName);
        return resultJson;
    }

    
    public static JSonArray handleToTree(JSonArray dataArr,String curId,Object... sortObjs){
        JSonArray resultJson = new JSonArray();
        recursionHandleToTree(resultJson,dataArr,curId,null,sortObjs);
        return resultJson;
    }

    
    public static JSonArray handleToTree(JSonArray dataArr,String curId,String childsName,Object... sortObjs){
        JSonArray resultJson = new JSonArray();
        recursionHandleToTree(resultJson,dataArr,curId,childsName,sortObjs);
        return resultJson;
    }

    
    public static void handleToTree(JSonArray resultJson, JSonArray dataArr){
        recursionHandleToTree(resultJson,dataArr,null,null);
    }

    
    public static void handleToTree(JSonArray resultJson, JSonArray dataArr,String curId){
        recursionHandleToTree(resultJson,dataArr,curId,null);
    }

    
    public static void handleToTree(JSonArray resultJson, JSonArray dataArr,Object... sortObjs){
        recursionHandleToTree(resultJson,dataArr,null,null,sortObjs);
    }

    
    public static void handleToTree(JSonArray resultJson, JSonArray dataArr,String curId,String childsName){
        recursionHandleToTree(resultJson,dataArr,curId,childsName);
    }

    
    public static void handleToTree(JSonArray resultJson, JSonArray dataArr,String curId,Object... sortObjs){
        recursionHandleToTree(resultJson,dataArr,curId,null,sortObjs);
    }

    
    public static void handleToTree(JSonArray resultJson, JSonArray dataArr,String curId,String childsName,Object... sortObjs){
        recursionHandleToTree(resultJson,dataArr,curId,childsName,sortObjs);
    }

    
    private static void recursionHandleToTree(JSonArray resultJson, JSonArray dataArr, String curId, String childsName,Object... sortObjs){
        if((null!=dataArr)&&(0 {
                    if(null!=d){
                        JSonObject dObj = (JSONObject) d;
                        if((null!=dObj)&&(dObj.containsKey("id"))&&(dObj.containsKey("parentId"))&&(StringUtils.equals(dObj.getString("parentId"),curId))){
                            return true;
                        }
                    }
                    return false;
                })
                .sorted(new DataSortComparator(sortObjs))
                .collect(Collectors.toCollection(JSONArray::new));
                if((null!=childJson)&&(0 {
                                        if(null!=d){
                                            JSonObject dObj = (JSONObject) d;
                                            if((null!=dObj)&&(dObj.containsKey("id"))&&(StringUtils.isNotBlank(dObj.getString("id")))){
                                                return true;
                                            }
                                        }
                                        return false;
                                    })
                                    .sorted(new DataSortComparator(sortObjs))
                                    .collect(Collectors.toCollection(JSONArray::new));
                                    dataObj.put(((StringUtils.isNotBlank(childsName))?childsName:"childs"),levelTwoJson);
                                }else{
                                    dataObj.put(((StringUtils.isNotBlank(childsName))?childsName:"childs"),new JSonArray());
                                }
                                //保存当前对象到结果集
                                resultJson.add(dataObj);
                            }
                        }
                    }
                }
            }else{
                JSonObject dataObj =null;
                JSonObject topObj =null;
                Optional existOpt =null;
                JSonArray childJson =null;
                for(Object data:dataArr){
                    if(null != data){
                        dataObj = (JSONObject) data;
                        if((null!=dataObj)&&(dataObj.containsKey("id"))&&(StringUtils.isNotBlank(dataObj.getString("id")))){
                            topObj = new JSonObject();
                            if((dataObj.containsKey("parentId"))&&(StringUtils.isNotBlank(dataObj.getString("parentId")))){
                                //检索顶级组织节点
                                topObj = findTopOrgNode(dataArr,dataObj.getString("parentId"));
                            }
                            if((null==topObj)||(!topObj.containsKey("id"))||    (StringUtils.isBlank(topObj.getString("id")))){
                                topObj = dataObj;
                            }
                            if(null!=topObj){
                                //判断是否存在
                                Boolean existFlag = false;
                                if((null!=resultJson)&&(0 {
                                        if(null!=s){
                                            JSonObject dObj = (JSONObject) s;
                                            if((null!=dObj)&&(dObj.containsKey("id"))&&(StringUtils.isNotBlank(dObj.getString("id")))&&(StringUtils.equals(dObj.getString("id"),topOrgId))){
                                                return true;
                                            }
                                        }
                                        return false;
                                    }).findAny();
                                    existFlag = existOpt.isPresent();
                                }
                                if(! existFlag){
                                    childJson = new JSonArray();
                                    //递归处理子级为树结构
                                    recursionHandleToTree(childJson,dataArr,topObj.getString("id"),childsName,sortObjs);
                                    topObj.put(((StringUtils.isNotBlank(childsName))?childsName:"childs"),childJson);
                                    resultJson.add(topObj);
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    
    private static JSonObject findTopOrgNode(JSonArray dataArr,String curId){
        if(StringUtils.isNotBlank(curId)){
            Optional parentOpt = dataArr.stream().distinct().filter(d -> {
                if(null!=d){
                    JSonObject dObj = (JSONObject) d;
                    if((null!=dObj)&&(dObj.containsKey("id"))&&(StringUtils.isNotBlank(dObj.getString("id")))&&(StringUtils.equals(dObj.getString("id"),curId))){
                        return true;
                    }
                }
                return false;
            }).findAny();
            if(parentOpt.isPresent()){
                JSonObject dataObj = (JSONObject) parentOpt.get();
                if((null!=dataObj)&&(dataObj.containsKey("id"))&&(StringUtils.isNotBlank(dataObj.getString("id")))){
                    if((dataObj.containsKey("parentId"))&&(StringUtils.isNotBlank(dataObj.getString("parentId")))){
                        JSonObject parentObj = findTopOrgNode(dataArr,dataObj.getString("parentId"));
                        return (null!=parentObj)?parentObj:dataObj;
                    }
                    return dataObj;
                }
            }
        }

        return null;
    }

    
    public static class DataSortComparator implements Comparator{
        
        private Object[] sortObjs;

        public DataSortComparator(Object[] sortObjs){
            super();
            this.sortObjs = sortObjs;
        }

        @Override
        public int compare(Object before, Object after) {
            int compareInt = 0;
            if((null!=sortObjs)&&(0 < sortObjs.length)&&(null!=before)&&(null!=after)){
                JSonObject sortObj =null;
                JSonObject objOne = null;
                JSonObject objTwo = null;
                for(Object obj:sortObjs){
                    if(null!=obj){
                        sortObj = (JSONObject) obj;
                        if((null!=sortObj)&&(sortObj.containsKey("name"))){
                            objOne = ((sortObj.containsKey("isAsc"))&&(!sortObj.getBoolean("isAsc")))?(JSONObject) after:(JSONObject) before;
                            objTwo = ((sortObj.containsKey("isAsc"))&&(!sortObj.getBoolean("isAsc")))?(JSONObject) before:(JSONObject) after;
                            if((objOne.containsKey(sortObj.getString("name")))&&(null != objOne.get(sortObj.getString("name")))&&(objTwo.containsKey(sortObj.getString("name")))&&(null != objTwo.get(sortObj.getString("name")))){
                                try {
                                    compareInt = (new Double(objOne.getDoublevalue(sortObj.getString("name")))).compareTo(new Double(objTwo.getDoublevalue(sortObj.getString("name"))));
                                }catch (Exception e){
                                    compareInt = (objOne.getString(sortObj.getString("name"))).compareTo(objTwo.getString(sortObj.getString("name")));
                                }
                                if(0 == compareInt){
                                    continue;
                                }else{
                                    return compareInt;
                                }
                            }
                        }
                    }
                }
            }
            return compareInt;
        }
    }

}

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

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

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