0

私は次のように列挙型を持っています(実際のものははるかに大きいです):

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

しかし、いくつかのインデックス/イテレータを使用して月をループできますか、それとも個別に呼び出す必要がありますか? (私はこれらの多くを持っています)。

多分より良いデータ構造?何かが変更をトリガーするまでメモリに保持される価格表です。

4

2 に答える 2

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;
}
于 2012-07-12T18:58:24.930 に答える
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;
 }

このようにして、ループ内のすべてのエントリを反復処理できます。

double15桁以上の精度が必要でない限り、私は使用します。

 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;
 }
于 2012-07-12T18:52:34.273 に答える