import io.jsonwebtoken.lang.Collections;
import lombok.Data;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Description 封装树
*/
public class BuildTree{
public static void main(String[] args) {
CategoryVO categoryVO1 = new CategoryVO();
categoryVO1.setName("分类1");
categoryVO1.setParentId(null);
categoryVO1.setId("1");
CategoryVO categoryVO2 = new CategoryVO();
categoryVO2.setName("分类1-1");
categoryVO2.setParentId("1");
categoryVO2.setId("2");
CategoryVO categoryVO3 = new CategoryVO();
categoryVO3.setName("分类1-1-1");
categoryVO3.setParentId("2");
categoryVO3.setId("3");
List<CategoryVO> list = new ArrayList<>();
list.add(categoryVO1);
list.add(categoryVO2);
list.add(categoryVO3);
List<CategoryVO> tree1 = getTree(list);
List<CategoryVO> tree2 = getRootTree(list);
System.out.println(tree1.size());
System.out.println(tree2.size());
}
/**
* 递归方法
*/
public static List<CategoryVO> getTree(List<CategoryVO> list, String parentId){
List<CategoryVO> treeList = new ArrayList<>();
for(CategoryVO categoryVO : list){
if(parentId.equals(categoryVO.getParentId())){
categoryVO.setChildren(getTree(list, categoryVO.getId()));
treeList.add(categoryVO);
}
}
return treeList;
}
/**
* 获取根数据
*/
public static List<CategoryVO> getRootTree(List<CategoryVO> list){
if(Collections.isEmpty(list)){
return new ArrayList<>();
}
LinkedList<CategoryVO> l = new LinkedList<>();
l.addAll(list);
Iterator<CategoryVO> iterator = l.iterator();
while(iterator.hasNext()){
CategoryVO categoryVO = iterator.next();
if(categoryVO.getParentId() != null){
iterator.remove();
continue;
}
categoryVO.setChildren(getTree(list, categoryVO.getId()));
}
return l;
}
/**
* 按parentId取
*/
public static List<CategoryVO> getTree(List<CategoryVO> list){
if(Collections.isEmpty(list)){
return new ArrayList<>();
}
LinkedList<CategoryVO> linkedList = new LinkedList<>();
Map<String, List<CategoryVO>> map = list.stream().collect(Collectors.groupingBy(item -> item.getParentId() != null ? item.getParentId() : "noParent"));
// 存放所有id
Set<String> idSet = new HashSet<>();
for (CategoryVO categoryVO : list) {
if(categoryVO.getParentId() != null){
idSet.add(categoryVO.getParentId());
}
linkedList.add(categoryVO);
}
Iterator<CategoryVO> iterator = linkedList.iterator();
CategoryVO categoryVO;
while(iterator.hasNext()){
categoryVO = iterator.next();
categoryVO.setChildren(map.get(categoryVO.getId()));
if(idSet.contains(categoryVO.getParentId())){
iterator.remove();
}
}
return linkedList;
}
}
@Data
class Category {
private String name;
private String id;
private String parentId;
}
@Data
class CategoryVO extends Category{
private List<CategoryVO> children;
}
【java】树结构数据组装
最新推荐文章于 2024-05-28 18:14:46 发布