java - 使用 Java8 流实现此集合的最佳方式

标签 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;
        }
    };

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

String[] allVals = {"a","b","c","d","e"}

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

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

最佳答案

您需要使用 flatMap展平阵列。此外,您可以使用 distinct()在流上,而不是收集到 HashSet 中。

Arrays.stream(EnumVals.values())
    .map(EnumVals::getValues)
    .flatMap(Arrays::stream)
    .distinct()
    .toArray(String[]::new);

关于java - 使用 Java8 流实现此集合的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36073968/

相关文章:

lambda - Java 8 Lambda 表达式中的分组依据

java - 是否可以在jOOQ中不仅根据列名或数据类型,还根据表名设置自定义类型?

java - 使用 aerospike 进行集成测试?

java - SQL逻辑上下文/场景

java - 如何统计Stream已处理的元素数量?

java - 如何使用流来计算接收输入的数组的总和?

java - 在 Mac OS X El Capitan 上通过 Java 使用 AppleScript

java - 当看不到 java 7 时,Jwrapper 因 java 7 invokedynamic 的类版本错误而失败

java - 如何使用 java 或 scala 处理大文件的最后一 block

Java 等同于 C# 中的 where