java - 我应该选择哪种方法 fromValue() 函数枚举

标签 java performance optimization enums

嗨,我想在 ENUM 中提供 fromValue() 函数。您能否提供您宝贵的建议,我应该选择哪种方法:-

  1. 这里我们每次迭代 ENUM 值并返回匹配的结果。

<p></p>

<pre><code>    public enum DAY {
        SUNDAY("sunday"),
        MONDAY("monday"),
        TUESDAY("tuesday"),
        UNKNOWN("unknown");

        private final String value;

        DAY(final String value) {
            this.value = value;
        }

        public String value() {
            return value;
        }

        public static DAY fromValue(final String value) {
            return Stream.of(DAY.values())
                    .filter( day -> day.value().equals(value))
                    .findAny()
                    .orElse(UNKNOWN);
        }
    }
</code></pre>

<p></p>

  • 在这种方法中,我们使用静态 block 创建键值映射并返回值而无需迭代。但这里我们需要使用“静态 block ”
  • 
        public enum DAY {<p></p>
    
    <pre><code>    SUNDAY("sunday"),
        MONDAY("monday"),
        TUESDAY("tuesday"),
        UNKNOWN("unknown");
    
        private final String value;
    
        DAY(final String value) {
            this.value = value;
        }
    
        private static final Map<String, DAY> VALUE_TO_TYPE = new HashMap<>();
    
        static {
            Stream.of(DAY.values()).forEach(type -> VALUE_TO_TYPE.put(type.value, type));
        }
    
        public String value() {
            return value;
        }
    
        public static DAY fromValue(final String value) {
            final DAY day = VALUE_TO_TYPE.get(value);
            return day != null ?  day : UNKNOWN;
        }
    }
    </code></pre>
    
    <p></p>

    最佳答案

    采用第二种方法,稍加修改。

    
    public enum DAY {<p></p>
    
    <pre><code>    SUNDAY("sunday"),
        MONDAY("monday"),
        TUESDAY("tuesday"),
        UNKNOWN("unknown");
    
        private final String value;
    
        DAY(final String value) {
            this.value = value;
        }
    
        private static final Map<String, DAY> VALUE_TO_TYPE = Stream.of(DAY.values()).collect(Collectors.toMap(d -> d.value, d -> d));
    
        public String value() {
            return value;
        }
    
       public static Optional<DAY> fromValue(final String value) {
           return Optional.ofNullable(VALUE_TO_TYPE.get(value));
       }
    }
    </code></pre>
    
    <p></p>

    关于java - 我应该选择哪种方法 fromValue() 函数枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46319362/

    相关文章:

    sql - SQL Server View 的性能测试产生了令人惊讶的结果。为什么?

    javascript - 计算复选框总数

    performance - 通过相互依赖的迭代对 for 循环进行向量化

    python - 我怎样才能让这个Python文件扫描得更快?

    algorithm - 遗传算法中的线性适应度缩放产生负适应度值

    在列表中查找匹配对的算法

    java - Z3 java 中的替换

    Java JTextArea 与 JMenuItem 重叠

    java - Java Spring Boot 会以线程安全的方式在 Redis 中设置和获取值吗?

    java - 在java中打开参数