将 int 与 enum 匹配的优雅方式,其中每个 enum 类型对应一个范围
我试图想出一种优雅的方法来解决 Java 中的这个问题:
给定一个 0-100 的整数,有一种优雅的方法可以将其转换为枚举,其中枚举的每个可能值对应于一系列整数。
例如,
enum grades{
A -> 90-95%
B -> 85-90%,
C -> 75-85%
...
etc
}
任何人都可以想出一种简洁的方法来编写一个给定 int 返回成绩枚举或抛出 IllegalArgumentException 的方法吗?
I am trying to think of an elegant way to solve this problem in Java:
Given an int of 0-100 what is an elegant way to turn it into an enum where each of the enum's possible values correspond to a range of ints.
For example
enum grades{
A -> 90-95%
B -> 85-90%,
C -> 75-85%
...
etc
}
Can anybody think of a concise way to write a method that given an int returns an enum of grades or throws a IllegalArgumentException?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
编写一个静态方法,就像
valueOf()
已经存在一样,调用它说inRange()
,返回Grade
。更好地初始化静态地图,百分比作为键,等级作为值。在这种情况下,我建议您使用 apache commons 集合的
MapUtils
。下面是一个例子,那么你的方法将如下所示,
Write a static method, just like
valueOf()
is already there, call it sayinRange()
, returnGrade
.Better initialize a static
map
, percent as keys and Grade as values. I suggest you to use apache commons collection'sMapUtils
in this case. Below is an example,then your method will look like below,
我将使边界成为枚举的属性,并
使用边界和具有下一个较低序数的枚举边界在枚举中实现一个方法。
最后在枚举上实现一个静态方法,该方法迭代实例以查找匹配的实例。
I'd make the boundaries an attribute of the enum, and implement a method
in the enum, using the boundary and the boundary of the enum with the next lower ordinal number.
Finally implement a static method on the enum, that iterates through the instances to find the matching instance.
提前创建一个索引为 0..100 的数组,并将每个槽分配给您希望其对应的值。
然后在实际循环中只需在数组中查找值即可。
Ahead of time create an array with index 0..100 and assign each slot to the value you want it to correspond to.
Then in the actual loop just look the value up in the array.