我有多个状态存储在枚举中。
public enum Status {
IS_A("isA"),
IS_B("isB"),
FP_ERR("fp_err"),
FP_BLAH("fp_blah"),
CORRECT("correct")
private final String value;
Status(String value) {
this.value = value;
}
}
我想基于这些状态创建类别,而不是通过以下方式修改Status enum类。
public enum Category {
CategoryA("CategoryA",Status.IS_A, Status.IS_B),
CategoryB("CategoryB",Status.FP_ERR, Status.FP_BLAH).
CategoryC("CategoryC",Status.Correct);
private List<Status> status;
private String category;
private static final Map<Status, String> VALUE_MAP = Stream.of(Category.values())
Category(String category, Status ... status) {
this.status = Arrays.asList(status);
this.category = category;
}
public static String getCategory(Status status) {
//Retrun category based on Status type
String category = VALUE_MAP.get(status);
return category;
}
}
我无法弄清楚如何将每个类别的值及其状态存储在地图VALUE_MAP
中答案 0 :(得分:2)
您根本不需要VALUE_MAP
。在category
之后检索Status
时,您只需浏览所有Category.values()
并找到包含所请求的Status
的<{1}}:
public static String getCategory(Status status) {
for (Category category : values()) {
if (category.status.contains(status)) {
return category.category;
}
}
return null;
}
答案 1 :(得分:2)
如果您将初始化更改为static
块,则可以执行以下操作:
private static final EnumMap<Status, String> VALUE_MAP = new EnumMap<>(Status.class);
static {
Arrays.stream(Category.values()).forEach(category -> {
category.status.forEach(status -> {
VALUE_MAP.put(status, category.category);
});
});
}