将 int 与 enum 匹配的优雅方式,其中每个 enum 类型对应一个范围

ben*_*rre 3 java enums

我正在尝试想一个优雅的方法来用Java解决这个问题:

给定一个 0-100 的整数,这是将其转换为枚举的优雅方法,其中枚举的每个可能值对应于一个整数范围。

例如

enum grades{

    A -> 90-95%
    B -> 85-90%,
    C -> 75-85%
    ...
    etc

}
Run Code Online (Sandbox Code Playgroud)

有人能想出一种简洁的方法来编写一个给定 int 返回成绩枚举或抛出 IllegalArgumentException 的方法吗?

Ade*_*ari 5

编写一个静态方法,就像valueOf()已经存在的那样,称之为inRange()return Grade

public enum Grade {
    A(100, 90), B(89, 80), C(79, 70);

    int uBound;
    int lBound;

    Grade(int uBound, int lBound){
      ...
    }

    public static Grade inRange(int percent){
      ...
    }
}
Run Code Online (Sandbox Code Playgroud)

最好将 static map、百分比初始化为键,将 Grade 初始化为值。在这种情况下,我建议您使用 apache commons 集合MapUtils。下面是一个例子,

private static final Map<Integer, Grade> GRADE_MAP = UnmodifiableMap.decorate(
        MapUtils.putAll(new HashMap<Integer, Grade>(), new Object[][]{
            {0, F}, {1, F}, .....,
            .....
            .....
            {100, A}
        }));
Run Code Online (Sandbox Code Playgroud)

那么你的方法将如下所示,

    public static Grade inRange(int percent){
      return GRADE_MAP.get(percent);
    }
Run Code Online (Sandbox Code Playgroud)