Getting enum associated with int value
enums, java
Solution
EDIT August 2018
Today I would implement this as follows
public enum LegNo {
NO_LEG(-1), LEG_ONE(1), LEG_TWO(2);
private final int value;
LegNo(int value) {
this.value = value;
}
public static Optional<LegNo> valueOf(int value) {
return Arrays.stream(values())
.filter(legNo -> legNo.value == value)
.findFirst();
}
}
You'll have to maintain a mapping inside the enum.
public enum LegNo {
NO_LEG(-1), LEG_ONE(1), LEG_TWO(2);
private int legNo;
private static Map<Integer, LegNo> map = new HashMap<Integer, LegNo>();
static {
for (LegNo legEnum : LegNo.values()) {
map.put(legEnum.legNo, legEnum);
}
}
private LegNo(final int leg) { legNo = leg; }
public static LegNo valueOf(int legNo) {
return map.get(legNo);
}
}
The static block will be invoked only once, so there is practically no performance issue here.
EDIT: Renamed the method to `valueOf` as it is more inline with other Java classes.
Problem
Previously, I had my LegNo enums defined simply as: ``` NO_LEG, LEG_ONE, LEG_TWO ``` and by calling `return LegNo.values()[i];`, I was able to get the value associated with each enum. But now I've decided I want the `LegNo` enum `NO_LEG` to be the int -1 instead of 0 so I decided to use a private constructor to initialise and set its int value ``` NO_LEG(-1), LEG_ONE(1), LEG_TWO(2); private LegNo(final int leg) { legNo = leg; } ``` the only thing now is that because I'm doing it this way the `values()` method will not work for the `NO_LEG` enum. How do I get the enum associated with the int? Is there any efficient way of doing this other than using a case switch statement or an if-elseif-elseif I can see a lot of SO questions to do with getting the int value from the enum, but I'm after the reverse.