我有一个“ HashMap>映射”,它表示类似于目录树的对象树,在该目录树中,父目录可以获取其他子目录,依此类推。列表中的值也可以代表父级。
地图包含例如以下键/值对:
map.put(obj1, [obj2, obj3, obj4, obj5])
map.put(obj2, [obj6, obj7, obj8, obj9])
map.put(obj6, [obj10, obj11, obj12, obj13])
map.put(obj10, [])
如果我现在编码:
List children = map.get(obj1);
for(Object child : children){
obj1.add(child);
}
我得到以下对象结构:
obj1--
|
obj2
|
obj3
|
obj3
|
obj5
多数民众赞成在我知识的结尾,因为我编程时间不长。我知道我有递归代码来获取正确的对象结构,如:
obj1--
|
obj2--
| |
| obj6--
| | |
| obj7 obj10
| | |
| obj8 obj11
| | |
| obj9 obj12
|
|
obj3
|
obj3
|
obj5
我正在努力实现一个递归的工作代码,该代码在循环中重建对象结构。
如果有人能以正确的方式带我或提供一些例子,那将非常好。
预先感谢 约翰
答案 0 :(得分:0)
尝试一下:
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class So53579861_recursively_reconstruct_object_structure {
static String indent() {
String string="";
for(int i=0;i<4*indent;i++)
string+=" ";
return string;
}
static void visit(Map<Object,List<Object>> map,Object key) {
System.out.println(indent()+key);
List<Object> list=map.get(key);
++indent;
if(list!=null)
for(Object object:list)
visit(map,object);
--indent;
}
public static void main(String[] args) {
visit(map,list.get(0));
}
static int indent;
static List<Object> list=new ArrayList<>();
static {
for(int i=1;i<=13;i++)
list.add(new Integer(i));
System.out.println(list);
}
static Map<Object,List<Object>> map=new LinkedHashMap<>();
static {
List<Object> children=new ArrayList<>();
for(int i=2;i<=5;i++)
children.add(list.get(i-1));
map.put(list.get(1-1),children);
children=new ArrayList<>();
for(int i=6;i<=9;i++)
children.add(list.get(i-1));
map.put(list.get(2-1),children);
children=new ArrayList<>();
for(int i=10;i<=13;i++)
children.add(list.get(i-1));
map.put(list.get(6-1),children);
children=new ArrayList<>();
map.put(list.get(10-1),children);
children=new ArrayList<>();
System.out.println(map);
}
}