繁体   English   中英

转换列表 <String> 用Java 8设置

[英]Convert a List<String> to a Set with Java 8

是否有一个单行将String列表转换为一组枚举? 例如,拥有:

public enum MyVal {
    ONE, TWO, THREE
}

List<String> myValues = Arrays.asList("ONE", "TWO", "TWO");

我想将myValues转换为包含相同项目的Set<MyVal>

EnumSet.of(MyVal.ONE, MyVal.TWO)

是的,您可以创建元素的Stream<String> ,使用映射器MyVal::valueOf将它们映射到相应的枚举值,并将其收集到由noneOf初始化的toCollection的新EnumSet

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]"
}

如果您只是对Set as result,而不是EnumSet感兴趣,您可以简单地使用内置的收集器Collectors.toSet()

这是一个双线(但更短):

EnumSet<MyVal> myVals = EnumSet.allOf(MyVal.class);
myVals.removeIf(myVal -> !myValues.contains(myVal.name()));

您可以创建包含所有可能值的EnumSet ,而不是添加列表中不存在的元素,而不是添加列表中的元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM