原始数据:
[{
"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);
}
}
}
}