有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用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)

共 (2) 个答案

  1. # 1 楼答案

    是的,您可以为元素创建一个Stream<String>,使用映射器MyVal::valueOf将每个元素映射到相应的枚举值,并将其收集到一个新的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,而不是一个EnumSet,你可以简单地使用内置的收集器Collectors.toSet()

  2. # 2 楼答案

    这里有一条两行线(但更短):

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

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