我有这个枚举:
public enum AccountRange {
RANGE1("100,200"), RANGE2("201,300"), RANGE3("301,900");
private final String rangeAccount;
private static final Map<String, AccountRange> lookup = new HashMap<String, AccountRange>();
static {
for (AccountRange d : AccountRange.values()) {
lookup.put(d.getRangeAccount(), d);
}
}
private AccountRange(String rangeAccount) {
this.rangeAccount = rangeAccount;
}
public String getRangeAccount() {
return rangeAccount;
}
public static AccountRange get(String abbreviation) {
return lookup.get(abbreviation);
}
}
Run Code Online (Sandbox Code Playgroud)
要返回,RANGE1我需要使用以下方法调用枚举:AccountRange.get("100,200")
但是问题是我需要用一个简单的值来调用枚举,例如:
AccountRange.get("108")我需要枚举返回,RANGE1因为108在100到200之间的第一个范围内
AccountRange.get("600") 我需要枚举返回RANGE3
您可以将范围存储为一对整数,并遍历枚举的值,以找到包含您要查找的参数的范围:
public enum AccountRange {
RANGE1(100, 200), RANGE2(201, 300), RANGE3(301, 900);
private final int min;
private final int max;
private AccountRange(int min, int max) {
this.min = min;
this.max = max;
}
public String getRangeAccount() {
return String.format("%d,%d", min, max);
}
public static AccountRange get(int val) {
return Arrays.stream(values())
.filter(r -> val >= r.min && val <= r.max)
.findFirst()
.orElse(null);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
211 次 |
| 最近记录: |