尝试通过其常量参数/字段值(即value0 / value1 / value2)查找元素而不进行迭代;有办法吗? 找到了用于枚举常量名称(即CONSTANT0 / CONSTANT1 / CONSTANT2)的guava实用程序方法,而不是该名称的参数/字段值。
import com.google.common.base.Enums;
enum Enum {
CONSTANT0("value0"), CONSTANT1("value1"), CONSTANT2("value2");
private final String value;
Enum(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
public class Driver {
public static void main(String[] args) {
// prints when input is value0
for (Enum constant : Enum.values()) {
if (constant.getValue().equalsIgnoreCase(args[0])) {
System.out
.println("vanilla version works with value i.e. java Driver value0"
+ args[0]);
}
}
// prints when input is CONSTANT0
if (Enums.getIfPresent(Enum.class, args[0]).isPresent())
System.out
.println("guava version works with constant i.e. java Driver CONSTANT0"
+ args[0]);
}
}
答案 0 :(得分:2)
如果没有优雅的专有或库函数,我建议你去Java 8:
Stream.of(Enum.values()).anyMatch(e -> e.getValue().equals("value0"));
答案 1 :(得分:1)
没有
在Java 1.5中设计并引入了枚举,以便开发人员能够以更清晰的方式枚举其常量。如果您查看Enum.java
来源,您将无法看到任何类似于哈希映射的简单查找方法。为了清楚代码,如果你想检查你的枚举是否包含一个值,而不必在每个用例中进行迭代,你应该创建一个静态方法来迭代枚举的内容。
如果您有任何疑问,请与我们联系!
答案 2 :(得分:0)
基于@Jon Skeet @Patricia Shanahan @Devarsh Desai @ajb
的建议import java.util.EnumMap;
import java.util.Map;
import com.google.common.base.Enums;
enum Enum {
CONSTANT0("value0"), CONSTANT1("value1"), CONSTANT2("value2");
private final String value;
static final Map<Enum, String> enumMap = new EnumMap<Enum, String>(
Enum.class);
static {
for (Enum e : Enum.values())
enumMap.put(e, e.getValue());
}
private Enum(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
public class Driver {
public static void main(String[] args) {
// prints when input is value0
for (Enum constant : Enum.values()) {
if (constant.getValue().equalsIgnoreCase(args[0])) {
System.out
.println("vanilla version works with value i.e. java Driver value0 "
+ args[0]);
}
}
// prints when input is CONSTANT0
if (Enums.getIfPresent(Enum.class, args[0]).isPresent())
System.out
.println("guava version works with constant i.e. java Driver CONSTANT0 "
+ args[0]);
// prints when input is value0
if (Enum.enumMap.containsValue(args[0]))
System.out
.println("static map version works with value i.e. java Driver value0 "
+ args[0]);
}
}