數據結構,樹解析

樹結構

{
    "connects": [
        {
            "label": "",
            "pageSourceId": "nodeBegin",
            "pageTargetId": "1584412572408",
            "target": {
                "blockId": "1584412572408",
                "blockX": 368,
                "blockY": 137,
                "connects": [
                    {
                        "label": "1000",
                        "pageSourceId": "1584412572408",
                        "pageTargetId": "1584412576172",
                        "target": {
                            "blockId": "1584412576172",
                            "blockX": 214,
                            "blockY": 154,
                            "connects": [],
                            "dealerId": "203",
                            "dealerName": "集團翼支付",
                            "isRoot": false,
                            "use": true
                        }
                    },
                    {
                        "label": "1000",
                        "pageSourceId": "1584412572408",
                        "pageTargetId": "1584412578216",
                        "target": {
                            "blockId": "1584412578216",
                            "blockX": 174,
                            "blockY": 291,
                            "connects": [],
                            "dealerId": "201",
                            "dealerName": "集團電子渠道",
                            "isRoot": false,
                            "use": true
                        }
                    },
					{
                        "label": "1000",
                        "pageSourceId": "1584412572408",
                        "pageTargetId": "1584412578216",
                        "target": {
                            "blockId": "1584412578216",
                            "blockX": 174,
                            "blockY": 291,
                            "connects": [],
                            "dealerId": "12",
                            "dealerName": "集團電子渠道",
                            "isRoot": false,
                            "use": true
                        }
                    }
                ],
                "dealerId": "204",
                "dealerName": "物聯網自服務平臺",
                "isRoot": false,
                "use": true
            }
        },
		{
            "label": "",
            "pageSourceId": "nodeBegin",
            "pageTargetId": "1584412572408",
            "target": {
                "blockId": "1584412572408",
                "blockX": 368,
                "blockY": 137,
                "connects": [
                    {
                        "label": "1000",
                        "pageSourceId": "1584412572408",
                        "pageTargetId": "1584412576172",
                        "target": {
                            "blockId": "1584412576172",
                            "blockX": 214,
                            "blockY": 154,
                            "connects": [],
                            "dealerId": "203",
                            "dealerName": "集團翼支付",
                            "isRoot": false,
                            "use": true
                        }
                    },
                    {
                        "label": "1000",
                        "pageSourceId": "1584412572408",
                        "pageTargetId": "1584412578216",
                        "target": {
                            "blockId": "1584412578216",
                            "blockX": 174,
                            "blockY": 291,
                            "connects": [],
                            "dealerId": "201",
                            "dealerName": "集團電子渠道",
                            "isRoot": false,
                            "use": true
                        }
                    }
                ],
                "dealerId": "204",
                "dealerName": "物聯網自服務平臺",
                "isRoot": false,
                "use": true
            }
        }
    ],
    "isRoot": true
}

定義樹結構代碼

package com.sitech.crmpd.domain;

import lombok.Data;
import org.apache.commons.collections.CollectionUtils;

import java.util.List;

/**
 * @oauth: qiangSW
 * @date: 2020/3/19 11:27
 * @description: com.sitech.crmpd.domain
 * @doc:
 */
@Data
public class Ruletree {

    public boolean isRoot;

    public List<Connect> connects;

    /**
     * 解析樹
     *
     * @param connects 樹
     * @param channels 解析樹後放入的值
     */
    public void resolverTree(List<Connect> connects, List<Long> channels) {
        if (CollectionUtils.isNotEmpty(connects)) {
            connects.stream().forEach(each -> {
                if ("nodeBegin".equals(each.getPageSourceId())) {
                    resolverTree(each.getTarget().getConnects(), channels);
                    return;
                }
                Long dealerId = Long.valueOf(each.getTarget().getDealerId());
                channels.add(dealerId);
                if (CollectionUtils.isNotEmpty(each.getTarget().getConnects())) {
                    resolverTree(each.getTarget().getConnects(), channels);
                }
            });
        }
    }
}

@Data
class Connect {
    public Target target;
    public String label;
    public String pageSourceId;
}

@Data
class Target {
    public String blockId;
    public String blockX;
    public String blockY;
    public List<Connect> connects;
    public String dealerId;
    public String dealerName;
    public String use;
    public boolean isRoot;
}

測試結果

public static void main(String[] args) {
        String str = "{\n" +
                "    \"connects\": [\n" +
                "        {\n" +
                "            \"label\": \"\",\n" +
                "            \"pageSourceId\": \"nodeBegin\",\n" +
                "            \"pageTargetId\": \"1584412572408\",\n" +
                "            \"target\": {\n" +
                "                \"blockId\": \"1584412572408\",\n" +
                "                \"blockX\": 368,\n" +
                "                \"blockY\": 137,\n" +
                "                \"connects\": [\n" +
                "                    {\n" +
                "                        \"label\": \"1000\",\n" +
                "                        \"pageSourceId\": \"1584412572408\",\n" +
                "                        \"pageTargetId\": \"1584412576172\",\n" +
                "                        \"target\": {\n" +
                "                            \"blockId\": \"1584412576172\",\n" +
                "                            \"blockX\": 214,\n" +
                "                            \"blockY\": 154,\n" +
                "                            \"connects\": [],\n" +
                "                            \"dealerId\": \"203\",\n" +
                "                            \"dealerName\": \"集團翼支付\",\n" +
                "                            \"isRoot\": false,\n" +
                "                            \"use\": true\n" +
                "                        }\n" +
                "                    },\n" +
                "                    {\n" +
                "                        \"label\": \"1000\",\n" +
                "                        \"pageSourceId\": \"1584412572408\",\n" +
                "                        \"pageTargetId\": \"1584412578216\",\n" +
                "                        \"target\": {\n" +
                "                            \"blockId\": \"1584412578216\",\n" +
                "                            \"blockX\": 174,\n" +
                "                            \"blockY\": 291,\n" +
                "                            \"connects\": [],\n" +
                "                            \"dealerId\": \"201\",\n" +
                "                            \"dealerName\": \"集團電子渠道\",\n" +
                "                            \"isRoot\": false,\n" +
                "                            \"use\": true\n" +
                "                        }\n" +
                "                    },\n" +
                "\t\t\t\t\t{\n" +
                "                        \"label\": \"1000\",\n" +
                "                        \"pageSourceId\": \"1584412572408\",\n" +
                "                        \"pageTargetId\": \"1584412578216\",\n" +
                "                        \"target\": {\n" +
                "                            \"blockId\": \"1584412578216\",\n" +
                "                            \"blockX\": 174,\n" +
                "                            \"blockY\": 291,\n" +
                "                            \"connects\": [],\n" +
                "                            \"dealerId\": \"12\",\n" +
                "                            \"dealerName\": \"集團電子渠道\",\n" +
                "                            \"isRoot\": false,\n" +
                "                            \"use\": true\n" +
                "                        }\n" +
                "                    }\n" +
                "                ],\n" +
                "                \"dealerId\": \"204\",\n" +
                "                \"dealerName\": \"物聯網自服務平臺\",\n" +
                "                \"isRoot\": false,\n" +
                "                \"use\": true\n" +
                "            }\n" +
                "        },\n" +
                "\t\t{\n" +
                "            \"label\": \"\",\n" +
                "            \"pageSourceId\": \"nodeBegin\",\n" +
                "            \"pageTargetId\": \"1584412572408\",\n" +
                "            \"target\": {\n" +
                "                \"blockId\": \"1584412572408\",\n" +
                "                \"blockX\": 368,\n" +
                "                \"blockY\": 137,\n" +
                "                \"connects\": [\n" +
                "                    {\n" +
                "                        \"label\": \"1000\",\n" +
                "                        \"pageSourceId\": \"1584412572408\",\n" +
                "                        \"pageTargetId\": \"1584412576172\",\n" +
                "                        \"target\": {\n" +
                "                            \"blockId\": \"1584412576172\",\n" +
                "                            \"blockX\": 214,\n" +
                "                            \"blockY\": 154,\n" +
                "                            \"connects\": [],\n" +
                "                            \"dealerId\": \"203\",\n" +
                "                            \"dealerName\": \"集團翼支付\",\n" +
                "                            \"isRoot\": false,\n" +
                "                            \"use\": true\n" +
                "                        }\n" +
                "                    },\n" +
                "                    {\n" +
                "                        \"label\": \"1000\",\n" +
                "                        \"pageSourceId\": \"1584412572408\",\n" +
                "                        \"pageTargetId\": \"1584412578216\",\n" +
                "                        \"target\": {\n" +
                "                            \"blockId\": \"1584412578216\",\n" +
                "                            \"blockX\": 174,\n" +
                "                            \"blockY\": 291,\n" +
                "                            \"connects\": [],\n" +
                "                            \"dealerId\": \"201\",\n" +
                "                            \"dealerName\": \"集團電子渠道\",\n" +
                "                            \"isRoot\": false,\n" +
                "                            \"use\": true\n" +
                "                        }\n" +
                "                    }\n" +
                "                ],\n" +
                "                \"dealerId\": \"204\",\n" +
                "                \"dealerName\": \"物聯網自服務平臺\",\n" +
                "                \"isRoot\": false,\n" +
                "                \"use\": true\n" +
                "            }\n" +
                "        }\n" +
                "    ],\n" +
                "    \"isRoot\": true\n" +
                "}";
        Ruletree ruletree = JSONObject.parseObject(str, Ruletree.class);
        List<Long> channels = Lists.newArrayList();
        ruletree.resolverTree(ruletree.getConnects(), channels);
        System.out.println("解析樹:"+channels);

    }

輸出結果

解析樹:[203, 201, 12, 203, 201]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章