gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:22:21 26 4
gpt4 key购买 nike

嗨,我想在 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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com