Search code examples
javaenumsdictionaryenum-map

How to put string items in a map of enums of enums of enums of String?


I would like to create an array (enum) of array (enum) of array (enum) of Strings. I don't think it is possible to achieve this in Java, but I have heard about EnumMap.

public class Tricky {

    public enum enumA { A1, A2, A3 };
    public enum enumB { B1, B2, B3 };
    public enum enumC { C1, C2, C3 };

    HashMap<EnumMap<enumA, EnumMap<enumB, enumC>>,String> item
        = new HashMap<EnumMap<enumA, EnumMap<enumB, enumC>>,String>();

    public Tricky() {

        // How do I put and get strings in my hash map?


    }
}

The above code compiles, but how can I put and get string items in my map?


Solution

  • you might find this useful:

    package p;
    enum enumA {
        A1,A2,A3;
    }
    enum enumB {
        B1,B2,B3;
    }
    enum enumC {
        C1,C2,C3;
    }
    class MyArray{
        MyArray(Class<? extends Enum> e1,Class<? extends Enum> e2,Class<? extends Enum> e3) {
            strings=new String[e1.getEnumConstants().length][e1.getEnumConstants().length][e2.getEnumConstants().length];
            e3.getEnumConstants();
        }
        void set(enumA a,enumB b,enumC c,String string) {
            strings[a.ordinal()][b.ordinal()][c.ordinal()]=string;
        }
        String get(enumA a,enumB b,enumC c) {
            return strings[a.ordinal()][b.ordinal()][c.ordinal()];
        }
        public String toString() {
            StringBuffer sb=new StringBuffer();
            for(enumA a:enumA.values())
                for(enumB b:enumB.values()) {
                    for(enumC c:enumC.values()) {
                        sb.append(get(a,b,c));
                        sb.append('\n');
                    }
                    sb.append('\n');
                }
            return sb.toString();
        }
        public static void main(String[] arguments) {
            MyArray myArray=new MyArray(enumA.class,enumB.class,enumC.class);
            for(enumA a:enumA.values())
                for(enumB b:enumB.values())
                    for(enumC c:enumC.values())
                        myArray.set(a,b,c,""+a+b+c);
            System.out.println(myArray);
        }
        final String[][][] strings;
    }