使用Java8流实现此集合的最佳方法

Zen*_*nil 3 java java-8 java-stream collectors

private enum EnumVals {
        FIRST(new String[]{"a","b"}),
        SECOND(new String[]{"a","b","c","d"}),
          THIRD(new String[]{"d","e"});

        private String[] vals;

        EnumVals(String[] q) {
            vals=q;
        }

        public String[] getValues(){
            return vals;
        }
    };
Run Code Online (Sandbox Code Playgroud)

我需要的是所有EnumVals.getValues()的唯一组合列表.

String[] allVals = {"a","b","c","d","e"}
Run Code Online (Sandbox Code Playgroud)

我做了类似下面的事情,但它抛出了错误:

Stream.of(EnumVals.values()).map(w->w.getValues()).collect(Collectors.toCollection(HashSet::new)).toArray(new String[0]);
Run Code Online (Sandbox Code Playgroud)

Mis*_*sha 8

您需要使用flatMap来展平数组.此外,您可以distinct()在流上使用而不是收集到HashSet.

Arrays.stream(EnumVals.values())
    .map(EnumVals::getValues)
    .flatMap(Arrays::stream)
    .distinct()
    .toArray(String[]::new);
Run Code Online (Sandbox Code Playgroud)