原始数据:
[{ "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); } } } }
存在父子关系的平级List 转化为包含的JSON数据
最新推荐文章于 2023-07-04 11:43:46 发布