package com.study.utils;
import com.study.entity.Per;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class TreeUtils {
public static Per getCurrentNode(List<Per> list){
Per per = list.stream().min(Comparator.comparing(Per::getId)).get();
return setChildrenNode(per, list);
}
public static Per setChildrenNode(Per per,List<Per> list){
List<Per> collect = list.stream().filter(item -> {
return per.getId().equals(item.getPid());
}).collect(Collectors.toList());
per.setPerList(collect);
if(collect.size()!=0){
collect.stream().forEach(item -> {setChildrenNode(item,list);});
}
return per;
}
}
package com.study.entity;
import lombok.Data;
import javax.persistence.*;
import java.util.List;
@Data
@Entity
@Table(name = "per")
public class Per {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private Integer pid;
@Transient
private List<Per> perList;
}
package com.study;
import com.alibaba.fastjson.JSON;
import com.study.dao.PerRepository;
import com.study.entity.Per;
import com.study.utils.TreeUtils;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@SpringBootTest
class JpaApplicationTests {
@Resource
private PerRepository perRepository;
@Test
void test(){
List<Per> collect = new ArrayList<>();
List<Per> list = getList(collect,2);
Per currentNode = TreeUtils.getCurrentNode(list);
JSON o = (JSON)JSON.toJSON(currentNode);
System.out.println(o);
}
public List<Per> getList(List<Per> list,Integer id){
Per per = perRepository.findById(id).get();
if(per!=null){
list.add(per);
}
List<Per> children = perRepository.findByPid(per.getId());
children.stream().forEach(item ->{getList(list,item.getId());});
return list;
}
}
手动实现一个树结构(根据参数ID返回当前节点以及所有子节点,递归查询下一级节点)
最新推荐文章于 2023-12-08 22:15:00 发布