Java基础篇【城市递归】

需求

返回城市列表(需展示层级关系)

思路

获取所有数据,先将第一层拆出来,再根据第一层的id递归一层一层往下获取。

代码

实体类

static class Recursion{
		private Integer id;
		/**名称*/
		private String name;
		/**上级id*/
		private Integer upId;
		/**下级城市集合*/
		private List<Recursion> list;
		public Integer getId() {
			return id;
		}
		public void setId(Integer id) {
			this.id = id;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public Integer getUpId() {
			return upId;
		}
		public void setUpId(Integer upId) {
			this.upId = upId;
		}
		public List<Recursion> getList() {
			return list;
		}
		public void setList(List<Recursion> list) {
			this.list = list;
		}
		
		
		@Override
		public String toString() {
			 return new ToStringBuilder(this,ToStringStyle.NO_CLASS_NAME_STYLE)
			            .append("id", getId())
			            .append("name", getName())
			            .append("upid", getUpId())
			            .append("list", getList())
			            .toString();
		}
		public static List<Recursion> getRecursionList(){
			DemoTest.Recursion recursion1=new DemoTest.Recursion();
			recursion1.setId(1);
			recursion1.setName("省1");
			DemoTest.Recursion recursion2=new DemoTest.Recursion();
			recursion2.setId(2);
			recursion2.setName("省2");
			DemoTest.Recursion recursion3=new DemoTest.Recursion();
			recursion3.setId(3);
			recursion3.setName("省3");
			DemoTest.Recursion recursion4=new DemoTest.Recursion();
			recursion4.setId(4);
			recursion4.setName("市1");
			recursion4.setUpId(1);
			DemoTest.Recursion recursion5=new DemoTest.Recursion();
			recursion5.setId(5);
			recursion5.setName("市2");
			recursion5.setUpId(2);
			DemoTest.Recursion recursion6=new DemoTest.Recursion();
			recursion6.setId(6);
			recursion6.setName("市3");
			recursion6.setUpId(3);
			DemoTest.Recursion recursion7=new DemoTest.Recursion();
			recursion7.setId(7);
			recursion7.setName("县1");
			recursion7.setUpId(4);
			DemoTest.Recursion recursion8=new DemoTest.Recursion();
			recursion8.setId(8);
			recursion8.setName("县2");
			recursion8.setUpId(5);
			DemoTest.Recursion recursion9=new DemoTest.Recursion();
			recursion9.setId(9);
			recursion9.setName("县3");
			recursion9.setUpId(6);
			DemoTest.Recursion recursion10=new DemoTest.Recursion();
			recursion10.setId(10);
			recursion10.setName("镇1");
			recursion10.setUpId(7);
			List<DemoTest.Recursion> list=new ArrayList<>();
			list.add(recursion1);
			list.add(recursion2);
			list.add(recursion3);
			list.add(recursion4);
			list.add(recursion5);
			list.add(recursion6);
			list.add(recursion7);
			list.add(recursion8);
			list.add(recursion9);
			list.add(recursion10);
			return list;
		}
		
	}

方法

	/**
	 * 测试递归
	 */
	@Test
	public void test4() {
		List<Recursion> list = DemoTest.Recursion.getRecursionList();
		//先找第一层
		List<Recursion> recursionList = 
				list.stream().filter(data->data.getUpId()==null)
				.collect(Collectors.toList());
		//再按第一层遍历
		recursionList=getRecursion(list,recursionList);
		recursionList.stream().forEach(data->{
			System.out.println(data);
		});
		String json=JSONObject.toJSONString(recursionList);
		System.out.println(json);
	}
	
	/**
	 * 遍历第一层
	 */
	private List<Recursion> getRecursion(List<Recursion> list,List<Recursion> data){
		if(data==null || data.size()==0) {
			return data;
		}
		for(Recursion recursion : data) {
			List<Recursion> res= getDow(recursion,list);
			 if(res!=null) {
				 recursion.setList(res);
			 }
		}
		return data;
	}
	/**
	 * 获取list里data的下一层
	 */
	private List<Recursion> getDow(Recursion data,List<Recursion> list){
		 List<Recursion> collect =
				 list.stream().filter(recursion->data.getId().equals(recursion.getUpId()))
				 .collect(Collectors.toList());
		 if(collect==null || collect.size()==0) {
			 return null;
		 }
		 for(Recursion dow : collect) {
			 List<Recursion> res= getDow(dow,list);
			 if(res!=null) {
				 dow.setList(res);
			 }
		 }
		 return collect;
	}

打印结果:

[id=1,name=省1,upid=,
list=[[id=4,name=市1,upid=1,
list=[[id=7,name=县1,upid=4,
list=[[id=10,name=镇1,upid=7,
list=]]]]]]]
[id=2,name=省2,upid=,
list=[[id=5,name=市2,upid=2,
list=[[id=8,name=县2,upid=5,
list=]]]]]
[id=3,name=省3,upid=,
list=[[id=6,name=市3,upid=3,
list=[[id=9,name=县3,upid=6,
list=]]]]]

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值