树形结构Utils

这是一个Java工具类,包含将JSONArray转换为树状结构的方法`listToTree`,用于处理列表数据的层级关系。同时,类中还提供了生成32位无横线的UUID字符串方法`getUUID`,以及从URL获取数据的`httpGetData`方法。适用于数据处理和API交互场景。
摘要由CSDN通过智能技术生成
package com.prophesy.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

/**
 * @Author: Alex
 * @ClassName: CommonTreeUtil
 * @Description: 通用List转Tree
 * @Date: 2020/7/31 17:42
 * @Version: 1.0
 */
public class CommonTreeUtil {
    /**
     - listToTree
     - <p>方法说明<p>
     - 将JSONArray数组转为树状结构
     - @param arr 需要转化的数据
     - @param id 数据唯一的标识键值
     - @param pid 父id唯一标识键值
     - @param child 子节点键值
     - @return JSONArray
     */
    public static JSONArray listToTree(JSONArray arr, String id, String pid, String child){
        JSONArray r = new JSONArray();
        JSONObject hash = new JSONObject();
        //将数组转为Object的形式,key为数组中的id
        for(int i=0;i<arr.size();i++){
            JSONObject json = (JSONObject) arr.get(i);
            hash.put(json.getString(id), json);
        }
        //遍历结果集
        for(int j=0;j<arr.size();j++){
            //单条记录
            JSONObject aVal = (JSONObject) arr.get(j);
            //在hash中取出key为单条记录中pid的值
            JSONObject hashVP = (JSONObject) hash.get(aVal.get(pid).toString());
            //如果记录的pid存在,则说明它有父节点,将她添加到孩子节点的集合中
            if(hashVP!=null){
                //检查是否有child属性
                if(hashVP.get(child)!=null){
                    JSONArray ch = (JSONArray) hashVP.get(child);
                    ch.add(aVal);
                    hashVP.put(child, ch);
                }else{
                    JSONArray ch = new JSONArray();
                    ch.add(aVal);
                    hashVP.put(child, ch);
                }
            }else{
                r.add(aVal);
            }
        }
        return r;
    }

    public static String addZero(String str, int strLength) {
        int strLen = str.length();
        StringBuffer sb = null;
        while (strLen < strLength) {
            sb = new StringBuffer();
            sb.append(str).append("0");//右补0
            str = sb.toString();
            strLen = str.length();
        }
        return str;
    }
    /**

     * 自动生成32位的UUid,对应数据库的主键id进行插入用。

     * @return

     */

    public static String getUUID() {

      /*UUID uuid = UUID.randomUUID();

      String str = uuid.toString();

      // 去掉"-"符号

      String temp = str.substring(0, 8) + str.substring(9, 13)

            + str.substring(14, 18) + str.substring(19, 23)

            + str.substring(24);

      return temp;*/



        return UUID.randomUUID().toString().replace("-", "");

    }

    // getData方法
    public static String httpGetData(String urlStr) {
        String DEFAULT_ENCODING = "UTF-8";
        BufferedReader reader = null;
        StringBuilder sb = new StringBuilder();
        try {
            URL url = new URL(urlStr.trim());
            URLConnection conn = url.openConnection();
            conn.setDoOutput(true);
            // conn.setConnectTimeout(CONNECT_TIMEOUT);
            // conn.setReadTimeout(CONNECT_TIMEOUT);
            conn.connect();
            reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), DEFAULT_ENCODING));
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line);
                sb.append("\r\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (reader != null)
                    reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值