按顺序选择枚举;爪哇

时间:2019-12-29 11:07:51

标签: java random enums

是否有可能使用其序数枚举?

enum SimpleJackCards {
    As(11), König(10), Dame(10), Bube(10), Zehn(10), Neun(9), Acht(8),
    Sieben(7), Sechs(6), Fünf(5), Vier(4), Drei(3),Zwei(2), Yolly (1);
    private int value;
    SimpleJackCards(int val) {
        value = val;
    }
    int getValue (){
        return value;
    }
}

例如

我想写一个给我一张随机卡的方法……我将随机化一个整数。

并希望使用生成的序数获取该枚举。

i.e .:序数值为0将是值为As的枚举11

2 个答案:

答案 0 :(得分:6)

您可以使用随机生成的数字作为索引(代表序数)来简单地访问values()返回的数组:

// i.e.: if someRandomNumber = 0, then randomCard will be "As"
SimpleJackCards randomCard = SimpleJackCards.values()[someRandomNumber];

答案 1 :(得分:1)

Enum上没有方法可以按序检索它。您必须自己做。

public static SimpleJackCards getByOrdinal(int ordinal) {
    return Arrays.stream(SimpleJackCards.values())
            .filter(e -> e.ordinal() == ordinal)
            .findFirst()
            .orElseThrow(() -> new RuntimeException("Invalid ordinal"));
}

如果您不想每次都遍历枚举常量,则可以构造一个映射,在序数和枚举常量之间进行映射。

private static final Map<Integer, SimpleJackCards> ORDINAL_TO_ENUM;

static {
    ORDINAL_TO_ENUM = Arrays.stream(SimpleJackCards.values())
                .collect(Collectors.toMap(Enum::ordinal, Function.identity()));
}

public static SimpleJackCards getByOrdinal2(int ordinal) {
      return ORDINAL_TO_ENUM.get(ordinal); //returns null if passed an invalid ordinal
}