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

摘要:
示例代码如下所示:packagecom.magcle.lonalambda;importjava.util.Arrays;/***@AuthorMiracleLuna*@Date2019/6/923:40*@Version1.0*/publicenumAlarmGrade{注意(“注意”,“提示”),警告(“警告”,“警告”),严重(“se

示例代码如下:

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循环遍历,比较判断 
" + grade + ": " + AlarmGrade.getEnumType(grade).getName());
        System.out.println("
第二种方式:增强for循环遍历,比较判断 
" + grade + ": " + AlarmGrade.getEnumType1(grade).getName());
        System.out.println("
第三种方式:Lambda表达式,比较判断 
" + grade + ": " + AlarmGrade.getEnumType2(grade).getName());
        System.out.println("
第四种方式:Lambda表达式,比较判断 
" + 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 表达式过滤)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇DragonBones软件使用笔记 (pos工具、IK约束、关键帧等)rsync常用命令及格式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#配置文件管理

  最近在做项目的过程中用到配置文件,本文简要说明本人在项目过程中是如何使用配置文件的,目的是加深自己对配置文件管理的理解,以便在下次使用时能做到轻松自如。   配置文件,顾名思义,是用户在使用系统或者软件时需要根据不同的状况手动配置的文件。在c#wpf项目中,配置文件一般有两种,一种是在系统中新建的配置文件即应用程序配置文件,命名一般习惯为App.con...

钉钉开发系列(十二)机器人

钉钉的每个群都可以建若干个机器人,有默认的比如github,也可以自定义。我们使用自定义,建立自己的机器人,然后得到一串的URL,只要向这个URL进行POST请求后,就能将消息通知到对应的群中。机器人的创建可以参照官方的文档。 发送通知的代码如下 private string WEB_HOOK = "https://oapi.dingtalk.com/...

使用Element的table合并单元格的问题(合并行)

目标样式:  官网案例: <el-table :data="tableData" :span-method="arraySpanMethod" border style=" 100%"> <el-table-column prop="id" label="I...

ngx_lua 随笔

--[[ test--]]ngx.header.content_type = "text/plain"; --输出头部local user = ngx.var.arg_user -- 定义user变量并获取url中的参数 http://localhost?user=hellolocal sys = ngx.var.server_name -- 获取ngi...

SHA256加密(登陆注册的-密码加盐)

主要代码: 1 // 盐值 2 String salt = null; 3 String password = user.getPassword(); 4 //加密密码 5 String encryptPassword = null; 6 7 salt...

ES6 (9):iterator 遍历器

遍历器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。 作用: 一是为各种数据结构,提供一个统一的、简便的访问接口; 二是使得数据结构的成员能够按某种次序排列; 三是 ES6 创造了一种新的遍历命令for...of...