i will do it next days 2006/7/13, Matthias Wessendorf <[EMAIL PROTECTED]>:
Stephan,can you put that to the wiki ? On 7/13/06, stephan opitz <[EMAIL PROTECTED]> wrote: > 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 > > > -- Matthias Wessendorf further stuff: blog: http://jroller.com/page/mwessendorf mail: mwessendorf-at-gmail-dot-com
