用枚举值表示范围 | LIXI.FUN
0%

用枚举值表示范围

一句话提示

Map 不用 HashMap,用 TreeMap

上代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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 划分了区域范围了。

觉得有收获就鼓励下作者吧