是否有可能使用其序数枚举?
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
。
答案 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
}