Assuming that we have a set of categories: categories={A,B}. Let\'s assume more that A consists of subcategories: {A1,A2,A3} and B consists of subcategories: {B1,B2}.In addi
java.util.Map
objects with java.util.Collection
value types can represent arbitrary tree structures:
final Map<String,Set<String>> map = Collections.unmodifiableMap(
new HashMap<String,Set<String>>() {
{
put(
"A",
Collections.unmodifiableSet(
new HashSet<>(Arrays.asList("A1", "A2", "A3"))
)
);
put(
"A1",
Collections.unmodifiableSet(
new HashSet<>(Arrays.asList("A1a", "A1b"))
)
);
put(
"A2",
Collections.unmodifiableSet(
new HashSet<>(Arrays.asList("A2a", "A2b"))
)
);
put(
"A3",
Collections.unmodifiableSet(
new HashSet<>(Arrays.asList("A3a", "A3b", "A3c"))
)
);
put(
"B",
Collections.unmodifiableSet(
new HashSet<>(Arrays.asList("B1", "B2"))
)
);
put(
"B1",
Collections.unmodifiableSet(
new HashSet<>(Arrays.asList("B1a", "B1b", "B1c"))
)
);
put(
"B2",
Collections.unmodifiableSet(
new HashSet<>(Arrays.asList("B2a", "B2b"))
)
);
}
}
);
Or you could try something like javax.swing.tree.DefaultTreeModel
.
Probably an implementation of this:
public interface Category {
String getName();
Category getParent();
List<Category> getSiblings();
List<Category> getChildren();
List<Category> getDescendants();
void addChild(Category category);
void addChildren(List<Category> categories);
}
In addition to the answers above, I would like to share something I found on the internet too. I have not tested it yet, but it seems to offer an alternative:
http://alexradzin.blogspot.hk/2010/10/hierarchical-structures-with-java-enums_05.html
public enum OsType {
OS(null),
Windows(OS),
WindowsNT(Windows),
WindowsNTWorkstation(WindowsNT),
WindowsNTServer(WindowsNT),
Windows2000(Windows),
Windows2000Server(Windows2000),
Windows2000Workstation(Windows2000),
WindowsXp(Windows),
WindowsVista(Windows),
Windows7(Windows),
Windows95(Windows),
Windows98(Windows),
Unix(OS) {
@Override
public boolean supportsXWindows() {
return true;
}
},
Linux(Unix),
AIX(Unix),
HpUx(Unix),
SunOs(Unix),
;
private OsType parent = null;
private OsType(OsType parent) {
this.parent = parent;
}