温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java怎么实现通过值查找对应的枚举

发布时间:2022-02-07 10:14:15 来源:亿速云 阅读:757 作者:iii 栏目:开发技术

这篇文章主要介绍“Java怎么实现通过值查找对应的枚举”,在日常操作中,相信很多人在Java怎么实现通过值查找对应的枚举问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java怎么实现通过值查找对应的枚举”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    一、背景

    Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。

    最近工作中,对接了很多其他的系统,发现对接的同一个系统都有不同的环境(开发、测试、正式环境),并且每个环境的配置信息通常不会修改,所以发现用枚举 做配置项,使用起来比较简洁,不同的环境配置 只需多定义一个枚举值就搞定了。

    其中使用枚举就会涉及到通过传入的值,返回对应的枚举。

    二、通过一个值 ,查询返回对应的枚举(示例代码)

    2.1、枚举类

    @Getter
    public enum CustomType {
        TEST("test","测试","111"),
        DEV("dev","开发","222");
    
        String typeCode;
        String typeName;
        String orgId;
    
        CustomType(String typeCode, String typeName, String orgId) {
            this.typeCode = typeCode;
            this.typeName = typeName;
            this.orgId = orgId;
        }
    }

    2.2、常用的枚举方法;values(), ordinal() 和 valueOf() 方法

    enum 定义的枚举类默认继承了 java.lang.Enum 类,并实现了 java.lang.Seriablizable 和 java.lang.Comparable 两个接口。

    values(), ordinal() 和 valueOf() 方法位于 java.lang.Enum 类中:

    • values() 返回枚举类中所有的值。

    • ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。

    • valueOf()方法返回指定字符串值的枚举常量。

    传入值查询枚举,就是通过values()方法,返回所以枚举,再遍历全部枚举,只要传入的参数值 跟当前枚举的值跟相同,就返回当前枚举;

    2.3、通过传入一个或者多个值,返回对应的枚举

        public CustomType find(String typeCode){
            for (CustomType value : CustomType.values()) {
                if(typeCode.equals(value.getTypeCode())){
                    return value;
                }
            }
            //根据自身的业务 查不到可以返回null,或者抛出异常。
            return null;
        }
    
        public CustomType find(String orgId,String typeCode){
            if(orgId == null || typeCode == null){
                return null;
            }
    
            for (CustomType value : CustomType.values()) {
                if(orgId.equals(value.getOrgId()) &&
                        typeCode.equals(value.getTypeCode())){
                    return value;
                }
            }
            //根据自身的业务 查不到可以返回null,或者抛出异常。
            return null;
        }

    三、查找优化

    每次通过values()方法遍历查找,时间复杂度是O(n),而通过HashMap查找,时间复杂度是O(1)。

    虽说枚举的数量通常都不会很庞大,每次通过values()方法遍历查找速度也很快。用HashMap会多占用一点点内存,但是考虑到这一点内存能从时间复杂度是O(n)降到O(1),这种惠而不费的事,还是可以花时间去优化代码的。

        private static Map<String,CustomType> orgCustomType = new HashMap<>();
        static {
            for (CustomType value : CustomType.values()) {
                orgCustomType.put(value.getOrgId(),value);
            }
        }
    
        public CustomType find(String orgId){
            return orgCustomType.get(orgId);
        }

    到此,关于“Java怎么实现通过值查找对应的枚举”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI