樹結構
{
"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]