Java Enum枚举 遍历判断 四种方式(包括 Lambda 表达式过滤)

Posted 那些年的代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Enum枚举 遍历判断 四种方式(包括 Lambda 表达式过滤)相关的知识,希望对你有一定的参考价值。


package com.miracle.luna.lambda;

import java.util.Arrays;

/**

* @Author Miracle Luna

* @Date 2019/6/9 23:40

* @Version 1.0

*/

public enum AlarmGrade {

    ATTENTION("attention", "提示"),

    WARNING("warning","警告"),

    SERIOUS("serious", "严重"),

    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;

    }

    /**

    * 根据Key得到枚举的Value

    * 普通for循环遍历,比较判断

    *

    * @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;

    }

    /**

    * 根据Key得到枚举的Value

    * 增强for循环遍历,比较判断

    *

    * @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;

    }

    /**

    * 根据Key得到枚举的Value

    * Lambda表达式,比较判断(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;

    }

    /**

    * 根据Key得到枚举的Value

    * Lambda表达式,比较判断(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循环遍历,比较判断 \\n" + grade + ": " + AlarmGrade.getEnumType(grade).getName());

        System.out.println("\\n第二种方式:增强for循环遍历,比较判断 \\n" + grade + ": " + AlarmGrade.getEnumType1(grade).getName());

        System.out.println("\\n第三种方式:Lambda表达式,比较判断 \\n" + grade + ": " + AlarmGrade.getEnumType2(grade).getName());

        System.out.println("\\n第四种方式:Lambda表达式,比较判断 \\n" + grade + ": " + AlarmGrade.getEnumType3(grade).getName());

    }

}

第一种方式:普通for循环遍历,比较判断

attention: 提示

第二种方式:增强for循环遍历,比较判断

attention: 提示

第三种方式:Lambda表达式,比较判断

attention: 提示

第四种方式:Lambda表达式,比较判断

attention: 提示

PS:

总结,参考如下:

Enum枚举 遍历判断 四种方式(包括 Lambda 表达式过滤)

https://www.cnblogs.com/miracle-luna/p/10995539.html

Array数组 遍历 四种方式(包含 Lambda 表达式遍历)

https://www.cnblogs.com/miracle-luna/p/10995469.html

List集合 遍历 四种方式(包含 Lambda 表达式遍历)

https://www.cnblogs.com/miracle-luna/p/10995400.html

Map集合 遍历 五种方式(包含 Lambda 表达式遍历)

https://www.cnblogs.com/miracle-luna/p/10995132.html

以上是关于Java Enum枚举 遍历判断 四种方式(包括 Lambda 表达式过滤)的主要内容,如果未能解决你的问题,请参考以下文章

java怎么声明枚举类型

java成神之——enum枚举操作

Java之枚举注解反射

第11章 枚举和注解

C语言怎样取得枚举型的名字 而不是值

vue中使用枚举enum