Java:如何将字符串ArrayList分配给列表<;Enum>;
我有一个Enum类,其中每个Enum都有一个字符串值 我想从列表中创建具有枚举类型的列表。这里的字符串是枚举的值 是否可以在初始化期间直接分配它们?如果是,最好的方法是什么 下面是一个示例代码:Java:如何将字符串ArrayList分配给列表<;Enum>;,java,list,enums,Java,List,Enums,我有一个Enum类,其中每个Enum都有一个字符串值 我想从列表中创建具有枚举类型的列表。这里的字符串是枚举的值 是否可以在初始化期间直接分配它们?如果是,最好的方法是什么 下面是一个示例代码: public class SomeController { public enum MyEnum { A("a"), B("b"), C("c"); private final String value; My
public class SomeController {
public enum MyEnum {
A("a"),
B("b"),
C("c");
private final String value;
MyEnum(String value) {
this.value = value;
}
}
public String handler(
@RequestParam(name = "enumList") List<MyEnum> myEnumList ) {
//do something with myEnumList
return "something";
}
}
公共类控制器{
公共枚举髓鞘{
A(“A”),
B(“B”),
C(“C”);
私有最终字符串值;
MyEnum(字符串值){
这个值=值;
}
}
公共字符串处理程序(
@RequestParam(name=“enumList”)列表myEnumList){
//用myEnumList做点什么
返回“某物”;
}
}
p.S.如上所述,我需要直接将字符串列表分配给MyEnum列表。我无法在字符串列表上循环并逐个添加。首先创建枚举中所有枚举常量的映射:
private static final Map<String, MyEnum> CONSTANTS = Arrays.stream(values())
.collect(Collectors.toMap(e -> e.value, e -> e));
@JsonCreator
public static MyEnum fromValue(String value) {
MyEnum myEnum = CONSTANTS.get(value);
if(myEnum == null) {
throw new NoSuchElementException(value);
}
return myEnum;
}
Jackson将检测json creator方法,并使用它将字符串列表转换为枚举列表(甚至在输入
处理程序方法之前都会这样做)以防您使用Java 8,并且如果stringList包含枚举的名称
List<MyEnum> myenums = stringList
.stream()
.map(MyEnum::valueOf)
.collect(Collectors.toList());
List myenums=stringList
.stream()
.map(MyEnum::valueOf)
.collect(Collectors.toList());
您可以执行以下操作:
public static <T extends Enum<T>> List<T> toEnumList(
Iterable<String> strings, Class<T> clazz) {
List<T> result = new ArrayList<>();
for (String s : strings) {
result.add(Enum.valueOf(clazz, s));
}
return result;
}
publicstaticlist-toEnumList(
Iterable字符串,类clazz){
列表结果=新建ArrayList();
用于(字符串s:字符串){
结果.添加(枚举值(clazz,s));
}
返回结果;
}
它适用于任何枚举类型。您将获得什么内容类型以及如何转换它?预期结果是什么?仅当stringList
包含枚举的名称时才有效。仅当strings
包含枚举的名称时才有效