簡體   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