java - 如何从映射到多个结果的流中收集?

标签 java java-8 java-stream

我想通过调用 expand() 来映射列表中的每个条目,它返回多个条目,然后将结果收集为列表。

如果没有流,我会像这样完成此操作:

    List<String> myList = new ArrayList<>();
    List<String> expanded = new ArrayList<>();
    for (String s : myList) {
        expanded.addAll(expand(s));
    }
    return expanded;

    private List<String> expand(String x) {
        return Arrays.asList(x, x, x);
    }

如何使用流来实现这一点?这会产生编译错误:

return myList.stream().map(this::expand).collect(Collectors.toList());

最佳答案

flatMap应该对你有帮助:

return myList.stream()
        .flatMap(x -> expand(x).stream())
        .collect(Collectors.toList());

关于java - 如何从映射到多个结果的流中收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48431061/

相关文章:

Java - java.lang.IllegalStateException : source already consumed or closed

java - JAX-WS Maven 插件不适用于 JDK 8

java - 在 Java 中优先考虑流过滤器函数

java - Hadoop MapReduce程序连接到数据库

java - 可滚动 JTextField 的大小问题

java - 自定义异常是否最好从 java 客户端抛出?

java - 如何限制groupBy java流

java - 创建并读取测试文件android

JavaFX 绑定(bind)失败,返回 "Cannot bind to untyped object."

java - 流减少不兼容的类型