我可以遍历多维枚举(java)吗?

时间:2012-07-12 18:44:23

标签: java data-structures enums multidimensional-array

我有一个Enum如下(实际的更大):

public enum PricesType {

    SMALL("Small",
            new BigDecimal(     "9.69"      ),
            new BigDecimal(     "11.49"     ),
            new BigDecimal(     "13.39"     ),
            new BigDecimal(     "22.79"     ),
    MEDIUM("Medium",
            new BigDecimal(     "18.19"     ),
            new BigDecimal(     "27.99"     ),
            new BigDecimal(     "35.99"     ),
            new BigDecimal(     "44.89"     );
    String size;
    BigDecimal monthToMonth;
    BigDecimal sixMonth;
    BigDecimal twelveMonth;
    BigDecimal twentyFourMonth;
... constructors, methods...}

我是否有一种简单的方法来迭代这个多维方面?我知道如何按大小迭代,但我如何迭代不同的月份?

也就是说,我可以这样做:

for (PricesType o: PricesType.values()){
  System.out.println(o); // gives me the "SMALL" "MEDIUM" etc.
}

但我可以通过一些索引/迭代器循环使用几个月,还是 HAVE 来单独调用每个? (我有很多这些)。

也许是更好的数据结构?这是一个价格表,它保存在内存中,直到某些内容触发更改。

2 个答案:

答案 0 :(得分:0)

我会使用数组

 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位的准确度,否则我会使用double

 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;
 }

答案 1 :(得分:0)

您可以考虑使用Collection API,它为您提供了大量迭代值的选项,在您的情况下,Map最好。

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;
}