使用Map生成树形结构

常见的生成树结构都是使用递归来进行操作,今天学到一个新方法,使用Map来生成。

实体类:

package collection.tree;

import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/*** @Author gao
 * @Date 2023/11/15 14:43
 */
@Data
public class Gis {

    private Long id;
    private String name;
    private Long parentId;
    private Gis parent;
    private List<Gis> children=new ArrayList<>();

    public Gis(Long id, String name, Long parentId) {
        this.id = id;
        this.name = name;
        this.parentId = parentId;
    }

}
public class TestGis {
    private static List<Gis> gisList=new ArrayList<Gis>(){{
        this.add(new Gis(1l,"北京",null));
        this.add(new Gis(12l,"北京2",1l));
        this.add(new Gis(2l,"吉林",null));
        this.add(new Gis(21l,"长春",2l));
        this.add(new Gis(22l,"四平",2l));
    }};
    public static void main(String args[]){
        List<Gis> result=new ArrayList();
        Map<Long,Gis> gisMap=new HashMap();
        for (Gis gis : gisList){
            gisMap.put(gis.getId(),gis);
        }

        for (Gis gis : gisList){
            Long parentId=gis.getParentId();
            if (ObjectUtil.isNotEmpty(parentId)){
                gisMap.get(parentId).getChildren().add(gis);
            }else{
                result.add(gis);
            }
        }

//一般给前端传数据都是放到List中,这里直接输出result就ok了

        //此处使用递归方法,把Map中的树转换成List
        List<Gis> listResult=new ArrayList<>();
        gisTreeFormatList(result,listResult);
        System.out.println(listResult);
    }

    public  static  void gisTreeFormatList(List<Gis> listGis,List result){
        for (Gis gis:listGis){
            result.add(gis);
            if (ObjectUtil.isNotEmpty(gis.getChildren())){
                gisTreeFormatList(gis.getChildren(),result);
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值