L C*_*L C -14 java if-statement range code-duplication
我需要将平均分数与字母等级相匹配。那意味着
if (90 < avg && avg < 100) {
return 'A';
}
Run Code Online (Sandbox Code Playgroud)
依此类推,直到带有5个if-else语句的'F'。
这是很多重复,并且我要匹配的范围具有相同的长度。
有没有更有效的方法可以做到这一点?我不想重复if-else语句5次。
我喜欢使用enum来解决此类问题。
您只需在枚举值中定义范围并使用谓词即可。
import java.util.*;
public class MyClass {
public static void main(String args[]) {
System.out.println(Letter.getValue(13)); // B
System.out.println(Letter.getValue(28)); // C
System.out.println(Letter.getValue(43)); // empty
}
}
enum Letter {
A(1, 10), B(11, 20), C(21, 30);
int min;
int max;
Letter (int min, int max) {
this.min = min;
this.max = max;
}
boolean inRange(int v) {
return v >= min && v <= max;
}
static Optional<Letter> getValue(int i) {
return Arrays.stream(values())
.filter(v -> v.inRange(i))
.findAny();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
518 次 |
| 最近记录: |