求一个递归删除对象的算法

卡卡的喵 2018-06-15 05:57:14
现在有这样一个类

TestBean{
private int id;
List<TestBean> beans = new ArrayList<TestBean>();
}


现在通过一个方法删除id为1的元素,怎么删除呢?我自己写了一个方法,好像不起作用,方法如下

private static void filter(TestBean bean) {
if(bean.getBeans().size() >0) {
for(TestBean child:bean.getBeans()) {
filter(child);//如果当前bean还有子节点,则递归
}
}else {
if(bean.getId() == 1) {
bean = null; //如果当前bean的id为1,则删除当前bean
}
}
}

结果如下:
...全文
1096 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
verejava 2018-06-16
  • 打赏
  • 举报
回复
stacksoverflow 2018-06-16
  • 打赏
  • 举报
回复
最外层在外面判断, public void filter(TestBean bean) { if(bean == null || bean.beans == null) { return; } for(int i = bean.beans.size() -1; i >=0; i --) { TestBean beanTemp = bean.beans.get(i); if(beanTemp.getId() == 1) { bean.beans.remove(i); }else { filter(beanTemp); } } }
oyljerry 2018-06-15
  • 打赏
  • 举报
回复
你的bean null并没有把原来的清楚。这种一般直接用高阶函数filter就可以。
stacksoverflow 2018-06-15
  • 打赏
  • 举报
回复
没细看,问题比较多,给你简单提一下,从新屡屡思路,我下班了。 1.去掉else, 2.bean=null 是赋值局部变量,影响不到调用者 3.如果修改成采用list.remove方法要考虑影响上层的迭代

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧