存在父子关系的平级List 转化为包含的JSON数据

原始数据:
[{
    "code": "product0",
    "id": 0,
    "name": "产品0",
    "pid": -1
}, {
    "code": "product1",
    "id": 1,
    "name": "产品1",
    "pid": -1
},{
    "code": "product6",
    "id": 6,
    "name": "产品6",
    "pid": 1
}, {
    "code": "product7",
    "id": 7,
    "name": "产品7",
    "pid": 1
}, {
    "code": "product8",
    "id": 8,
    "name": "产品8",
    "pid": 1
}, {
    "code": "product9",
    "id": 9,
    "name": "产品9",
    "pid": 1
}, {
    "code": "product10",
    "id": 10,
    "name": "产品10",
    "pid": 1
}, {
    "code": "product11",
    "id": 11,
    "name": "产品11",
    "pid": 10
}, {
    "code": "product12",
    "id": 12,
    "name": "产品12",
    "pid": 10
}, {
    "code": "product13",
    "id": 13,
    "name": "产品13",
    "pid": 10
}, {
    "code": "product14",
    "id": 14,
    "name": "产品14",
    "pid": 10
}, {
    "code": "product15",
    "id": 15,
    "name": "产品15",
    "pid": 10
}]处理后的数据
{
    "产品1": {
        "code": "product1",
        "产品10": {
            "产品15": {
                "code": "product15",
                "name": "产品15",
                "pid": 10,
                "id": 15
            },
            "产品14": {
                "code": "product14",
                "name": "产品14",
                "pid": 10,
                "id": 14
            },
            "code": "product10",
            "产品13": {
                "code": "product13",
                "name": "产品13",
                "pid": 10,
                "id": 13
            },
            "产品12": {
                "code": "product12",
                "name": "产品12",
                "pid": 10,
                "id": 12
            },
            "产品11": {
                "code": "product11",
                "name": "产品11",
                "pid": 10,
                "id": 11
            },
            "name": "产品10",
            "pid": 1,
            "id": 10
        },
        "name": "产品1",
        "pid": -1,
        "id": 1,
        "产品7": {
            "code": "product7",
            "name": "产品7",
            "pid": 1,
            "id": 7
        },
        "产品6": {
            "code": "product6",
            "name": "产品6",
            "pid": 1,
            "id": 6
        },
        "产品9": {
            "code": "product9",
            "name": "产品9",
            "pid": 1,
            "id": 9
        },
        "产品8": {
            "code": "product8",
            "name": "产品8",
            "pid": 1,
            "id": 8
        }
    },
    "产品0": {
        "code": "product0",
        "name": "产品0",
        "pid": -1,
        "id": 0
    }
}
package com.test;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.springframework.util.CollectionUtils;

import java.util.*;
import java.util.stream.Collectors;

public class Test {

    static final String jsonProdcutStr = "[{\n" +
            "\t\"code\": \"product0\",\n" +
            "\t\"id\": 0,\n" +
            "\t\"name\": \"产品0\",\n" +
            "\t\"pid\": -1\n" +
            "}, {\n" +
            "\t\"code\": \"product1\",\n" +
            "\t\"id\": 1,\n" +
            "\t\"name\": \"产品1\",\n" +
            "\t\"pid\": -1\n" +
            "}, {\n" +
            "\t\"code\": \"product2\",\n" +
            "\t\"id\": 2,\n" +
            "\t\"name\": \"产品2\",\n" +
            "\t\"pid\": -1\n" +
            "}, {\n" +
            "\t\"code\": \"product3\",\n" +
            "\t\"id\": 3,\n" +
            "\t\"name\": \"产品3\",\n" +
            "\t\"pid\": -1\n" +
            "}, {\n" +
            "\t\"code\": \"product4\",\n" +
            "\t\"id\": 4,\n" +
            "\t\"name\": \"产品4\",\n" +
            "\t\"pid\": -1\n" +
            "}, {\n" +
            "\t\"code\": \"product6\",\n" +
            "\t\"id\": 6,\n" +
            "\t\"name\": \"产品6\",\n" +
            "\t\"pid\": 1\n" +
            "}, {\n" +
            "\t\"code\": \"product7\",\n" +
            "\t\"id\": 7,\n" +
            "\t\"name\": \"产品7\",\n" +
            "\t\"pid\": 1\n" +
            "}, {\n" +
            "\t\"code\": \"product8\",\n" +
            "\t\"id\": 8,\n" +
            "\t\"name\": \"产品8\",\n" +
            "\t\"pid\": 1\n" +
            "}, {\n" +
            "\t\"code\": \"product9\",\n" +
            "\t\"id\": 9,\n" +
            "\t\"name\": \"产品9\",\n" +
            "\t\"pid\": 1\n" +
            "}, {\n" +
            "\t\"code\": \"product10\",\n" +
            "\t\"id\": 10,\n" +
            "\t\"name\": \"产品10\",\n" +
            "\t\"pid\": 1\n" +
            "}, {\n" +
            "\t\"code\": \"product6\",\n" +
            "\t\"id\": 6,\n" +
            "\t\"name\": \"产品6\",\n" +
            "\t\"pid\": 1\n" +
            "}, {\n" +
            "\t\"code\": \"product7\",\n" +
            "\t\"id\": 7,\n" +
            "\t\"name\": \"产品7\",\n" +
            "\t\"pid\": 1\n" +
            "}, {\n" +
            "\t\"code\": \"product8\",\n" +
            "\t\"id\": 8,\n" +
            "\t\"name\": \"产品8\",\n" +
            "\t\"pid\": 1\n" +
            "}, {\n" +
            "\t\"code\": \"product9\",\n" +
            "\t\"id\": 9,\n" +
            "\t\"name\": \"产品9\",\n" +
            "\t\"pid\": 1\n" +
            "}, {\n" +
            "\t\"code\": \"product10\",\n" +
            "\t\"id\": 10,\n" +
            "\t\"name\": \"产品10\",\n" +
            "\t\"pid\": 1\n" +
            "}, {\n" +
            "\t\"code\": \"product11\",\n" +
            "\t\"id\": 11,\n" +
            "\t\"name\": \"产品11\",\n" +
            "\t\"pid\": 10\n" +
            "}, {\n" +
            "\t\"code\": \"product12\",\n" +
            "\t\"id\": 12,\n" +
            "\t\"name\": \"产品12\",\n" +
            "\t\"pid\": 10\n" +
            "}, {\n" +
            "\t\"code\": \"product13\",\n" +
            "\t\"id\": 13,\n" +
            "\t\"name\": \"产品13\",\n" +
            "\t\"pid\": 10\n" +
            "}, {\n" +
            "\t\"code\": \"product14\",\n" +
            "\t\"id\": 14,\n" +
            "\t\"name\": \"产品14\",\n" +
            "\t\"pid\": 10\n" +
            "}, {\n" +
            "\t\"code\": \"product15\",\n" +
            "\t\"id\": 15,\n" +
            "\t\"name\": \"产品15\",\n" +
            "\t\"pid\": 10\n" +
            "}]";

    public static void main(String[] args) {


        List<Product> products = new ArrayList<>();

        products = JSONObject.parseArray(jsonProdcutStr, Product.class);

        System.out.println(JSON.toJSONString(products));

        //现将第一层数据过滤出来
        List<Product> productFrist = products.stream().filter(a -> a.getPid().equals(-1)).collect(Collectors.toList());

        //放入map中,最终map就是想要的格式
        Map<String, Map> mapMap = new HashMap<>();

        //处理map数据
        handlerMap(mapMap, productFrist, products);

        System.out.println(JSON.toJSONString(mapMap));

    }

    /**
     * 循环处理map
     * dealProducts
     * 第一层
     * 第二层
     * ...
     * 直到没有
     */
    static void handlerMap(Map map, List<Product> dealProducts, List<Product> products) {

        for (Product product : dealProducts) {

            Map<String, Map> mMap = new HashMap<String, Map>();
            //转化为Map处理
            mMap = JSON.parseObject(JSON.toJSONString(product), Map.class);
            System.out.println(JSON.toJSONString(mMap));
            //按照产品名称放入
            map.put(product.getName(), mMap);

            System.out.println("本次产品ID:" + product.getId());

            //获取当前层数据对应的下级数据
            List<Product> collect = products.stream().filter(a -> product.getId().equals(a.getPid())).collect(Collectors.toList());

            System.out.println("需要再次处理的数据条数:" + collect.size());
            //如果过滤得到的数据集合不为空,接着循环
            if (!CollectionUtils.isEmpty(collect) && collect.size() > 0) {
                handlerMap(mMap, collect, products);
            }

        }
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值