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