使用Java8将列表型数据转为树形数据

博客展示了Java相关代码,但未给出具体代码内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码如下:

import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.Data;
import lombok.experimental.Accessors;
import org.junit.Test;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Demo {

	@Test
	public void test01() {
	    List<Node> nodes = Lists.newArrayList();
	    Node node = new Node();
	    node.setId(1).setName("root").setPid(0);
	    nodes.add(node);
	    node = new Node();
	    node.setId(2).setName("level1-1").setPid(1);
	    nodes.add(node);
	    node = new Node();
	    node.setId(3).setName("level1-2").setPid(1);
	    nodes.add(node);
	
	    node = new Node();
	    node.setId(4).setName("level2-1").setPid(2);
	    nodes.add(node);
	
	    node = new Node();
	    node.setId(5).setName("level2-1").setPid(2);
	    nodes.add(node);
	
	    Map<Integer, List<Node>> nodeMap = nodes.stream().collect(Collectors.groupingBy(Node::getPid));
	
	    Map<Integer, Node> nodeMap2 = nodes.stream().collect(Collectors.toMap(Node::getId, x -> x));
	    for (Integer pid : nodeMap.keySet()) {
	        List<Node> nodeList = nodeMap.get(pid);
	        Node n = nodeMap2.get(pid);
	        if (n != null && CollectionUtil.isNotEmpty(nodeList)) {
	            n.setChildren(nodeList);
	        }
	    }
	
	    List<Node> result =  nodes.stream().filter(x -> x.getPid() == 0).collect(Collectors.toList());
	    System.out.println(JSONObject.toJSONString(result));
	
	}
	
	@Data
	@Accessors(chain = true)
	public static class Node {
	    private int id;
	    private String name;
	    private int pid;
	    private List<Node> children;
	}
}
实现这个功能的关键是将树形数据递归地遍历,然后将每个节点转换为对应的SQL语句。 以下是一个Java实现的示例代码: ```java import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; public class JsonToSql { public static void main(String[] args) { String jsonStr = "[\n" + " {\n" + " \"id\": \"1\",\n" + " \"name\": \"节点1\",\n" + " \"children\": [\n" + " {\n" + " \"id\": \"2\",\n" + " \"name\": \"节点2\"\n" + " },\n" + " {\n" + " \"id\": \"3\",\n" + " \"name\": \"节点3\",\n" + " \"children\": [\n" + " {\n" + " \"id\": \"4\",\n" + " \"name\": \"节点4\"\n" + " }\n" + " ]\n" + " }\n" + " ]\n" + " }\n" + "]"; JSONArray jsonArray = JSONArray.parseArray(jsonStr); StringBuilder sb = new StringBuilder(); for (int i = 0; i < jsonArray.size(); i++) { JSONObject obj = jsonArray.getJSONObject(i); buildSql(obj, sb); } System.out.println(sb.toString()); } private static void buildSql(JSONObject obj, StringBuilder sb) { String id = obj.getString("id"); String name = obj.getString("name"); sb.append("INSERT INTO table_name(id, name) VALUES(") .append(id).append(", '").append(name).append("');\n"); if (obj.containsKey("children")) { JSONArray children = obj.getJSONArray("children"); for (int i = 0; i < children.size(); i++) { JSONObject child = children.getJSONObject(i); buildSql(child, sb); } } } } ``` 这段代码将一个包含树形结构的JSON字符串转换为SQL语句。具体实现方法是递归遍历JSON对象,如果节点有子节点,继续递归遍历。最后将每个节点转换为对应的INSERT语句,拼接到StringBuilder对象中。 需要注意的是,这个示例只适用于树形结构比较简单的情况。如果树形结构比较复杂,可能需要更复杂的逻辑来处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值