嗨,我想在 ENUM 中提供 fromValue() 函数。您能否提供您宝贵的建议,我应该选择哪种方法:-
- 这里我们每次迭代 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/