我可以迭代多维枚举(java)吗?

我可以迭代多维枚举(java)吗?,java,data-structures,enums,multidimensional-array,Java,Data Structures,Enums,Multidimensional Array,我有一个枚举,如下所示(实际的枚举要大得多): 对于我来说,有没有一种简单的方法来迭代这个问题的多维方面?我知道如何按大小进行迭代,但如何迭代各个月 也就是说,我可以做到: for (PricesType o: PricesType.values()){ System.out.println(o); // gives me the "SMALL" "MEDIUM" etc. } 但是我可以用一些索引/迭代器循环几个月吗?或者我是否可以单独调用每个索引/迭代器?(我有很多这样的) 也许是更好

我有一个枚举,如下所示(实际的枚举要大得多):

对于我来说,有没有一种简单的方法来迭代这个问题的多维方面?我知道如何按大小进行迭代,但如何迭代各个月

也就是说,我可以做到:

for (PricesType o: PricesType.values()){
  System.out.println(o); // gives me the "SMALL" "MEDIUM" etc.
}
但是我可以用一些索引/迭代器循环几个月吗?或者我是否可以单独调用每个索引/迭代器?(我有很多这样的)

也许是更好的数据结构?它用于保存在内存中的价目表,直到有东西触发更改。

我会使用数组

 SMALL("Small",
        BigDecimal.valueOf(9.69),
        BigDecimal.valueOf(11.49),
        BigDecimal.valueOf(13.39),
        BigDecimal.valueOf(22.79));

 private final String size;
 private final BigDecimal[] values;

 PricesType(String size, BigDecimal... values) {
     this.size = size; this.values = values;
 }
这样,您可以迭代循环中的每个条目

除非您需要超过15位的准确度,否则我将使用双精度

 SMALL("Small", 9.69, 11.49, 13.39, 22.79);

 private final String size;
 private final double[] values;

 PricesType(String size, double... values) {
     this.size = size; this.values = values;
 }

您可能会考虑使用集合API,这会给您提供很多迭代值的选项,在这种情况下,映射将是最好的。

Map<PriceType, Set<BigDecimal>> priceMap = new HashMap<PriceType, Set<BigDecimal>>();
    priceMap.put(PriceType.SMALL, Sets.newHashSet(
        new BigDecimal(     "9.69"      ),
        new BigDecimal(     "11.49"     ),
        new BigDecimal(     "13.39"     ),
        new BigDecimal(     "22.79"     )
    ));

public enum PriceType {
    SMALL, MEDIUM, LARGE;
}
Map priceMap=newhashmap();
priceMap.put(PriceType.SMALL,Sets.newHashSet(
新的BigDecimal(“9.69”),
新的BigDecimal(“11.49”),
新的BigDecimal(“13.39”),
新的BigDecimal(“22.79”)
));
公共枚举价格类型{
小型、中型、大型;
}

…您可以将这些值的列表或映射传递到
enum
构造函数中……是的,但您只需要为集合进行整洁的初始化。任何标准的Java方式都应该有效。
Map<PriceType, Set<BigDecimal>> priceMap = new HashMap<PriceType, Set<BigDecimal>>();
    priceMap.put(PriceType.SMALL, Sets.newHashSet(
        new BigDecimal(     "9.69"      ),
        new BigDecimal(     "11.49"     ),
        new BigDecimal(     "13.39"     ),
        new BigDecimal(     "22.79"     )
    ));

public enum PriceType {
    SMALL, MEDIUM, LARGE;
}