枚舉的幾種使用方式
import java.util.Arrays;
/**
* @author: chenwenyu
* @Date: 2020/7/7
*/
public enum AlarmGrade {
ATTENTION("attention", "提示"),
WARNING("warning","警告"),
SERIOUS("serious", "嚴(yán)重"),
FAULT("fault", "故障"),
UNKNOWN("unknown", "未知");
private String key;
private String name;
/**
* @param key
* @param name
*/
AlarmGrade(String key, String name) {
this.key = key;
this.name = name;
}
/**
* @return Returns the key.
*/
public String getKey() {
return key;
}
/**
* @return Returns the name.
*/
public String getName() {
return name;
}
/**
* 根據(jù)Key得到枚舉的Value
* 普通for循環(huán)遍歷启涯,比較判斷
*
* @param key
* @return
*/
public static AlarmGrade getEnumType(String key) {
AlarmGrade[] alarmGrades = AlarmGrade.values();
for (int i = 0; i < alarmGrades.length; i++) {
if (alarmGrades[i].getKey().equals(key)) {
return alarmGrades[i];
}
}
return AlarmGrade.UNKNOWN;
}
/**
* 根據(jù)Key得到枚舉的Value
* 增強(qiáng)for循環(huán)遍歷迫摔,比較判斷
*
* @param key
* @return
*/
public static AlarmGrade getEnumType1(String key) {
AlarmGrade[] alarmGrades = AlarmGrade.values();
for (AlarmGrade alarmGrade : alarmGrades) {
if (alarmGrade.getKey().equals(key)) {
return alarmGrade;
}
}
return AlarmGrade.UNKNOWN;
}
/**
* 根據(jù)Key得到枚舉的Value
* Lambda表達(dá)式慌盯,比較判斷(JDK 1.8)
*
* @param key
* @return
*/
public static AlarmGrade getEnumType2(String key) {
AlarmGrade[] alarmGrades = AlarmGrade.values();
AlarmGrade result = Arrays.asList(alarmGrades).stream()
.filter(alarmGrade -> alarmGrade.getKey().equals(key))
.findFirst().orElse(AlarmGrade.UNKNOWN);
return result;
}
/**
* 根據(jù)Key得到枚舉的Value
* Lambda表達(dá)式,比較判斷(JDK 1.8)
*
* @param key
* @return
*/
public static AlarmGrade getEnumType3(String key) {
return Arrays.asList(AlarmGrade.values()).stream()
.filter(alarmGrade -> alarmGrade.getKey().equals(key))
.findFirst().orElse(AlarmGrade.UNKNOWN);
}
public static void main(String[] args) {
String grade = "attention";
System.out.println("第一種方式:普通for循環(huán)遍歷梳虽,比較判斷 \n" + grade + ": " + AlarmGrade.getEnumType(grade).getName());
System.out.println("\n第二種方式:增強(qiáng)for循環(huán)遍歷毁渗,比較判斷 \n" + grade + ": " + AlarmGrade.getEnumType1(grade).getName());
System.out.println("\n第三種方式:Lambda表達(dá)式习柠,比較判斷 \n" + grade + ": " + AlarmGrade.getEnumType2(grade).getName());
System.out.println("\n第四種方式:Lambda表達(dá)式蛉艾,比較判斷 \n" + grade + ": " + AlarmGrade.getEnumType3(grade).getName());
}
}