【问题标题】:Can I iterate over a multidimensional enum (java)?我可以迭代多维枚举(java)吗?
【发布时间】:2012-07-12 14:23:02
【问题描述】:

我有一个 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.
}

但是我可以用一些索引/迭代器循环几个月,还是我必须单独调用每个? (我有很多这样的)。

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

【问题讨论】:

  • ...您可以将这些值的列表或映射传递给enum 构造函数...

标签: java data-structures enums multidimensional-array


【解决方案1】:

您可以考虑改用 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;
}

【讨论】:

  • 是的,但您只需要它来进行 Set 的简洁初始化。任何标准的 Java 方式都应该可以工作。
【解决方案2】:

我会使用数组

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

【讨论】:

    猜你喜欢
    • 2013-12-21
    • 2012-06-08
    • 2013-04-16
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多