java - 有没有更有效的方法来编写多个 if else?
问题描述
我需要将平均分数与字母等级相匹配。这意味着
if (90 < avg && avg < 100) {
return 'A';
}
依此类推,直到 'F',带有 5 个 if-else 语句。
这是很多重复,我匹配的范围是相同的长度。
有没有更有效的方法来做到这一点?我不想重复 if-else 语句 5 次。
解决方案
我喜欢用 anenum
来解决这类问题。
您只需在枚举值中定义范围并使用谓词。
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();
}
}
推荐阅读
- c++ - DevIL/OpenIL 没有加载 alpha 通道
- powershell - powershell get-aduser 特定日期范围
- java - 如何避免调用 CompletableFuture.thenCompose(x -> x)?
- wordpress - 在 Wordpress 自定义帖子类型上具有动态重写标签的自定义永久链接
- ruby-on-rails - 编辑博客时的 Heroku 问题(随机路由到 Matchheight.js)
- python - 如何在 Django 序列化程序验证中引发多个 ValidationErrors(包括自定义错误)
- multithreading - 是否可以并行化或展开此循环?
- javascript - 使用 ImageField 在 Ajax 中序列化(表单)
- python - 带有数组的 Python Sklearn 管道
- react-native - Animated.View 和 Animated.Value 抛出只读赋值或不可变对象错误