是否有一个单行将String列表转换为一组枚举?例如,拥有:
public enum MyVal {
ONE, TWO, THREE
}
Run Code Online (Sandbox Code Playgroud)
和
List<String> myValues = Arrays.asList("ONE", "TWO", "TWO");
Run Code Online (Sandbox Code Playgroud)
我想转换myValues为Set<MyVal>包含相同项目的项目:
EnumSet.of(MyVal.ONE, MyVal.TWO)
Run Code Online (Sandbox Code Playgroud)
Tun*_*aki 21
是的,你可以让Stream<String>你的元素,他们每个人映射到与映射器各自的枚举值MyVal::valueOf和收集到一个新的EnumSet与toCollection被初始化noneOf:
public static void main(String[] args) {
List<String> myValues = Arrays.asList("ONE", "TWO", "TWO");
EnumSet<MyVal> set =
myValues.stream()
.map(MyVal::valueOf)
.collect(Collectors.toCollection(() -> EnumSet.noneOf(MyVal.class)));
System.out.println(set); // prints "[ONE, TWO]"
}
Run Code Online (Sandbox Code Playgroud)
如果您只是对Set结果感兴趣而不是a EnumSet,那么您可以简单地使用内置收集器Collectors.toSet().