一句话提示
Map 不用 HashMap,用 TreeMap
上代码
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Map;
import java.util.Optional;
import java.util.TreeMap;
@Getter
@AllArgsConstructor
public enum Scope {
/**
* A [90, 正无穷)
*/
A(90),
/**
* B [80, 90)
*/
B(80),
/**
* C [70, 80)
*/
C(70),
/**
* D [60, 70)
*/
D(60),
/**
* E [0, 60)
*/
E(0);
/**
* 下限
*/
private int limit;
private static final TreeMap<Integer, Scope> LIMIT_TO_SCOPE = new TreeMap<>();
static {
for (Scope scope : Scope.values()) {
LIMIT_TO_SCOPE.put(scope.limit, scope);
}
}
/**
* 通过 num 获得其所在的范围
* Optional 起提示调用者可能为 空
* 比如 num < 0 时
*
* @param num 数值
* @return 范围
*/
public static Optional<Scope> getScopeByNum(int num) {
// 具体使用 floorEntry 还是 ceilingEntry 需要根据上下限去实际判断
// 最快的方法试一下就好了
Map.Entry<Integer, Scope> entry = LIMIT_TO_SCOPE.floorEntry(num);
return entry == null ? Optional.empty() : Optional.of(entry.getValue());
}
}
这样就用确定值的 code 划分了区域范围了。