java - 循环自列表
问题描述
我有这个 Person 类,它有一个 Person (s) 列表。如何遍历人员并检查其中的每个对象是否有一个 Person(s) 列表以及其中的每个对象是否有一个列表等等?就嵌套的方式而言,我能想到的一切都非常有限。我可以编写一个递归循环,但这让我深入到第一级,但不确定如何通过递归获得 x 级深度。我确信过去有人遇到过这个问题,这应该不是那么困难,但我就是不能完全理解它。欢迎任何和所有想法!
public class Person {
// other fields removed for simplicity
private long id;
private List<Person> persons;
public List<Person> getPersons() {
return debates;
}
}
// essentially I am looking for a way to make this unlimited level nested looping
private void loopPersons() {
Person person = new Person();
if(person.getPersons() != null && !person.getPersons().isEmpty()) {
for(Person person1 : person.getPersons()) {
if(person1.getPersons() != null && !person1.getPersons().isEmpty()) {
System.out.println(person1.getId());
for(Person person2 : person1.getPersons()) {
if(person2.getPersons() != null && !person2.getPersons().isEmpty()) {
System.out.println(person2.getId());
}
}
}
}
}
}
更新:布赖恩在另一篇文章(向下滚动)中的回答基本上就是它的作用。遍历递归对象
解决方案
您可能只是在寻找一些使用带有尾条件的递归的扁平化方法。这可能类似于以下实现
// essentially I am looking for a way to make this unlimited level nested looping
private List<Person> loopPersons(Person person, List<Person> flattened) {
if (person.getPersons() == null || person.getPersons().isEmpty()) {
return flattened;
} else {
flattened.addAll(person.getPersons());
person.getPersons().forEach(p -> loopPersons(p, flattened));
}
return flattened;
}
注意:代码未经测试,旨在描述一种可能的方法,如果您考虑相同的思路,您可以采取这种方法。
推荐阅读
- python - 如何在 Python 中对 json 特定的键值进行排序
- python - python csv:编解码器无法解码字节0x9d
- c - C - 静态字符数组与动态字符数组
- kubernetes - 如何将用户从 OpenLDAP 同步到 Keycloak?
- php - Symfony formbuilder 格式化复选框
- flutter - Flutter Image.memory 加载显示什么
- c - 如何在C中填充字符串数组
- javascript - 如何将 Jquery 代码更改为 ReactJS 中的 JS 代码?
- asp.net - 如何在 Visual Studio bot 框架中的枚举中添加空间?
- swift - 在 UITableview 中保存数据