Java 将int与每个枚举类型对应于一个范围的枚举相匹配的优雅方式

Java 将int与每个枚举类型对应于一个范围的枚举相匹配的优雅方式,java,enums,Java,Enums,我正试图想出一种优雅的方法来用Java解决这个问题: 给定一个0-100的整数,将其转换为一个枚举(其中每个枚举的可能值对应一个整数范围)是一种优雅的方法 比如说 enum grades{ A -> 90-95% B -> 85-90%, C -> 75-85% ... etc } 有人能想出一种简洁的方法来编写一个给定int的方法,该方法返回一个等级枚举或抛出一个IllegalArgumentException吗?编写一个静态方法

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

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

比如说

enum grades{

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

}

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

编写一个静态方法,就像
valueOf()
已经存在一样,调用它说
inRange()
,返回
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){
      ...
    }
}
最好初始化静态
映射,百分比作为键,等级作为值。在这种情况下,我建议您使用ApacheCommons集合的
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}
        }));

我将使边界成为枚举的一个属性,并实现一个方法

public boolean isInRange(int i)
在枚举中,使用边界和枚举的边界以及下一个较低的序号


最后在枚举上实现一个静态方法,该方法遍历实例以找到匹配的实例。

提前创建一个索引为0..100的数组,并将每个插槽分配给希望其对应的值


然后在实际循环中,只需在数组中查找值。

我是否应该在valueOf和inRange方法中使用一组if-else-if语句?
switch
不适合这里
if-else
听起来更好。或者最好还是将静态make%初始化为键,将等级初始化为值。我建议您在本例中使用ApacheCommons集合的
MapUtils
。谢谢,您的想法已被采纳,采用的方式略有不同。
public boolean isInRange(int i)