How to build an hierarchy tree of categories in java using enums or any other way?

前端 未结 3 1898
借酒劲吻你
借酒劲吻你 2021-01-03 10:35

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

相关标签:
3条回答
  • 2021-01-03 10:44

    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.

    0 讨论(0)
  • 2021-01-03 10:56

    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);
    }
    
    0 讨论(0)
  • 2021-01-03 11:02

    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;
    }
    
    0 讨论(0)
提交回复
热议问题