/** * This one assumes that the list is ordered so that parents come before children */ public Tree listToTree(List list) { Map refs = new HashMap(); Tree root = new Tree(0); Tree node = null for(Item item: list) { node = new Tree(item.id); refs.put(item.id, node) if(item.parent > 0) { refs.get(item.parent).children().add(node); } else { root.children().add(node); } } return root; } /** * This one does not assume any specific order of the list */ public Tree listToTree(List list) { Map allNodes = new HashMap(); Map> subNodes = new HashMap>(); Tree root = new Tree(0); Tree node = null for(Item item: list) { node = new Tree(item.id); allNodes.put(item.id, node); if(item.parent.id > 0) { if(subNodes.get(item.parent.id) == null) { subNodes.put(item.parent.id, new ArrayList()); } subNodes.get(item.parent.id).add(node); } else { root.children().add(node); } } for(Integer parent: subNodes.keySet()) { allNodes.get(parent).children(subNodes.get()); } return root; }