java - Recursive Table/Row Generator -


i'm having tough time wrapping head around following situation. best way explain may example

i have map<column,set<row>> object. let's contains following data:

columna['abc','def'] columnb['efg','hij','klm'] columnc['nop'] columnd['qrs','tuv','wxy','zzz'] 

i trying generate following output:

row1[abc,efg,nop,qrs] row2[abc,efg,nop,tuv] row3[abc,efg,nop,wxy] row4[abc,efg,nop,zzz] row5[abc,hij,nop,qrs] row6[abc,hij,nop,wxy] etc... 

so in case there 24 rows total.

however, number of columns , rows both dynamic. feel needs recursively done somehow i'm not sure start.

any appreciated.

update - made tree structure seems work.

    defaultmutabletreenode root = new defaultmutabletreenode();     set<defaultmutabletreenode> curnodes = new hashset<defaultmutabletreenode>();     curnodes.add(root);      final set<column> keys = map.keyset();     (final column key : keys) {         final set<row> rowset = map.get(key);         set<defaultmutabletreenode> tmpnodes = new hashset<defaultmutabletreenode>();         (final row row : rowset) {             defaultmutabletreenode curnode = new defaultmutabletreenode();             curnode.setuserobject(row);             tmpnodes.add(curnode);             (defaultmutabletreenode n : curnodes) {                 n.add(curnode);             }         }         curnodes = tmpnodes;     } 

i hope not student's homework.

first keep order of map's keys same, use sortedmap, treemap. furthermore in initial map every row contains single value 'abc'. recursion here depth-first traversal. hard thing map has not natural traversal. rest have todos/candidates , dones/result; step changing data , afterwards restore them.

here use more known list, stack nicer.

public list<row> generaterows(sortedmap<column, set<cell>> map) {     list<row> done = new arraylist<row>();     list<column> columnstodo = new linkedlist<column>(map.keyset());     list<cell> partialrow = new linkedlist<cell>();     generaterowsrec(map, columnstodo, partialrow, done);     return done; } void generaterowsrec(sortedmap<column, set<cell>> map, list<column> columnstodo, list<cell> partialrow, list<row> done) {     if (columnstodo.isempty()) {         done.add(new row(partialrow));         return;     }     column firstcolumn = columnstodo.remove(0); // step     (cell cell : map.get(firstcolumn)) {         partialrow.add(cell); // step b         generaterowsrec(map, columnstodo, partialrow, done);         partialrow.remove(partialrow.size() - 1); // unstep b     }     columnstodo.add(0, firstcolumn); // unstep } 

Comments

Popular posts from this blog

objective c - Change font of selected text in UITextView -

php - Accessing POST data in Facebook cavas app -

c# - Getting control value when switching a view as part of a multiview -