繁体   English   中英

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

[英]Can I iterate over a multidimensional enum (java)?

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

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

但我可以循环通过与一些指数/迭代器的几个月我必须单独调用每个? (我有很多这样的东西)。

也许更好的数据结构? 这是一个价目表,该价目表会一直保留在内存中,直到有东西触发更改为止。

我会用一个数组

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

您可能会考虑使用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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM