thx 2006/7/13, Gary VanMatre <[EMAIL PROTECTED]>:
>From: "stephan opitz" <[EMAIL PROTECTED]> > > problem is the structure. > > if i have an object containing an id and a parentId (which is null, or > linking to another object -> the parent one) > > if i get a list from db how is it possible to build up the structure > for the tree2 > > i tried hashmap or recursive algorithm, but nothing with much success... > > any ideas >You might consider the following code snippet. public class TreeBacker { public TreeNode findNode(TreeNode root, Integer sarg) { Integer id = root.getDescription() == null ? null : new Integer(root.getDescription()); if (compare(id, sarg) == 0) { return root; } Iterator ci = root.getChildren().iterator(); while (ci.hasNext()) { TreeNode found = findNode((TreeNode) ci.next(), sarg); if (found != null) return found; } return null; } public TreeNode getTreeData() { TreeNode root = new TreeNodeBase("root", null, false); TreeNode current = root; // current root Collection dbRows = getDBRows(); Iterator di = dbRows.iterator(); while (di.hasNext()) { MyVO vo = (MyVO) di.next(); Integer id = current.getDescription() == null ? null : new Integer(current.getDescription()); int order = compare(id, vo.getParent()); if (order != 0) { current = findNode(root, vo.getParent()); // if current is null you have an orphaned node } String type = vo.getParent() == null ? null : vo.getParent().toString(); String desc = vo.getId() == null ? null : vo.getId().toString(); current.getChildren().add(new TreeNodeBase(type, desc, false)); } return root; } public Collection getDBRows() { // select parent, id from table order by parent, id // null, 1 // null, 2 // null, 3 // 1, 4 // 1, 5 // 2, 6 // 2, 7 // 3, 8 // 3, 9 // 9, 10 // 9, 11 Set sortedList = new TreeSet(); sortedList.add(new MyVO(null, new Integer(1))); sortedList.add(new MyVO(new Integer(1), new Integer(4))); sortedList.add(new MyVO(new Integer(1), new Integer(5))); sortedList.add(new MyVO(null, new Integer(2))); sortedList.add(new MyVO(new Integer(2), new Integer(6))); sortedList.add(new MyVO(new Integer(2), new Integer(7))); sortedList.add(new MyVO(null, new Integer(3))); sortedList.add(new MyVO(new Integer(3), new Integer(8))); sortedList.add(new MyVO(new Integer(3), new Integer(9))); sortedList.add(new MyVO(new Integer(9), new Integer(10))); sortedList.add(new MyVO(new Integer(9), new Integer(11))); return sortedList; } class MyVO implements Comparable { private Integer parent = null; private Integer id = null; public MyVO(Integer parent, Integer id) { this.parent = parent; this.id = id; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getParent() { return parent; } public void setParent(Integer parent) { this.parent = parent; } public int compareTo(Object obj) { MyVO vo = (MyVO) obj; int order = compare(parent, vo.parent); if (order == 0) order = compare(id, vo.id); return order; } } public static int compare(Integer col1, Integer col2) { if ((col1 == null) && (col2 == null)) return 0; else if ((col1 == null) && (col2 != null)) return -1; else if ((col2 == null) && (col1 != null)) return 1; else return ((Comparable) col1).compareTo(col2); } public static void main(String[] args) { TreeBacker backer = new TreeBacker(); TreeNode root = backer.getTreeData(); } } > stephan Gary
