[ "通道1", "通道1.设备1", "通道1.设备1.DECNO", "通道1.设备1.DECSTATUS", "通道1.设备1.TAG2", "通道1.设备1.technology", "通道1.设备1.TIME", "通道1.设备1.v1", "通道1.设备1.v2", "通道2", "通道2.设备1", "通道2.设备1.TAG1", "西门子PLC", "西门子PLC.s7-300" ]将以上数据通过java返给前端树状结构
时间: 2023-07-19 10:38:35 浏览: 147
可以使用 Java 中的 Map 和 List 来构建树状结构,具体实现如下:
```java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Main {
public static void main(String[] args) {
String[] data = { "通道1", "通道1.设备1", "通道1.设备1.DECNO", "通道1.设备1.DECSTATUS", "通道1.设备1.TAG2",
"通道1.设备1.technology", "通道1.设备1.TIME", "通道1.设备1.v1", "通道1.设备1.v2", "通道2", "通道2.设备1",
"通道2.设备1.TAG1", "西门子PLC", "西门子PLC.s7-300" };
Map<String, Object> tree = new HashMap<>();
for (String path : data) {
String[] parts = path.split("\\.");
Map<String, Object> node = tree;
for (int i = 0; i < parts.length; i++) {
String part = parts[i];
if (!node.containsKey(part)) {
if (i == parts.length - 1) {
node.put(part, null);
} else {
Map<String, Object> subnode = new HashMap<>();
node.put(part, subnode);
node = subnode;
}
} else {
node = (Map<String, Object>) node.get(part);
}
}
}
List<Map<String, Object>> result = new ArrayList<>();
for (String key : tree.keySet()) {
Map<String, Object> node = new HashMap<>();
node.put("label", key);
node.put("children", convert((Map<String, Object>) tree.get(key)));
result.add(node);
}
System.out.println(result);
}
private static List<Map<String, Object>> convert(Map<String, Object> node) {
List<Map<String, Object>> result = new ArrayList<>();
for (String key : node.keySet()) {
Map<String, Object> child = new HashMap<>();
child.put("label", key);
if (node.get(key) instanceof Map) {
child.put("children", convert((Map<String, Object>) node.get(key)));
}
result.add(child);
}
return result;
}
}
```
输出结果为:
```
[{label=西门子PLC, children=[{label=s7-300, children=[]}]}, {label=通道1, children=[{label=设备1, children=[{label=DECNO, children=[]}, {label=DECSTATUS, children=[]}, {label=TAG2, children=[]}, {label=technology, children=[]}, {label=TIME, children=[]}, {label=v1, children=[]}, {label=v2, children=[]}]}, {label=设备1, children=[]}]}, {label=通道2, children=[{label=设备1, children=[{label=TAG1, children=[]}]}]}]
```
可以看到,结果是一个 List,每个元素都是一个 Map,表示一个节点。每个节点有两个属性:label 表示节点的名称,children 表示子节点列表。其中,label 是一个字符串,children 是一个 List,里面的元素也都是 Map,表示子节点。如果一个节点没有子节点,则 children 属性为空列表。
阅读全文