[英]How to avoid if-else statements in this scenario
我有一個班級成績,其身體如下:
public class Grades {
public static Grade getGrades(int marks) {
if (marks < 10) {
return Grade.FAILED;
} else if (marks < 13) {
return Grade.DISTINCTION;
} else if (marks < 15) {
return Grade.GREAT;
} else {
return Grade.GREATEST;
}
}
public static void main(String args[]){
System.out.println(getGrades(6));
}
}
和一個枚舉類:
public enum Grade {
FAILED("F"),
DISTINCTION("D"),
GREAT("G"),
GREATEST("G");
private String code;
Grade(String code){
this.code = code;
}
public String getCode() {
return code;
}
}
調用getGrades(int marks)
時,如何避免if else結構?
我將為此制定一個決策表。 如果Predicate
被評估為true
,它將只是Predicate
(接受輸入並返回true
或false
的函數)與相應結果之間的映射。
請注意,Java8引入了Predicate<T>
接口,這對您的情況可能非常有幫助。 另外,它可以表示為lambda,這將減少代碼的冗長性。
因此,您將擁有:
Map<Predicate<Integer>, Grade> table = new LinkedHashMap<Predicate<Integer>, Grade>() {{
put (x -> x < 10, Grade.FAILED);
put (x -> x < 13, Grade.DISTINCTION);
put (x -> x < 15, Grade.GREAT);
}};
然后,只需迭代決策表並評估Predicate
直到找到評估為true
的Predicate
,即可為您提供答案:
for (Entry<Predicate<Integer>, Grade> entry : table.entrySet()) {
if (entry.getKey().test(marks)) {
return entry.getValue();
}
}
return Grade.GREATEST;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.