java - Java 8 列表中 2 个字符串的每个组合

标签 java lambda functional-programming java-8 java-stream

我想组合列表中的每两个字符串并使用 java8 流返回组合列表:

List<String> list;
Stream.concat(list.stream(), list.stream())
                    .collect(toList());

但是,此代码不会生成组合,而只会生成列表的元素。我究竟做错了什么。我还希望此代码能够并行化,以便它可以在多个内核上运行

最佳答案

使用flatMap以组合方式组合字符串。每个字符串将与列表中的每个字符串连接。

List<String> combinations =
    list.stream()
        .flatMap(str1 -> list.stream().map(str2 -> str1 + str2))
        .collect(toList());

Ideone Demo

要使操作并行,请将 .stream() 替换为 .parallelStream()。根据您的输入大小,这可能会使操作变慢或变快。

关于java - Java 8 列表中 2 个字符串的每个组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42177054/

相关文章:

java - Clojure:是否可以继承用 :gen-class 定义的类的状态?

javascript - 2048 : Strange behaviour of reduceRight in map with lodash/fp

java webapps 并将现有项目开源到 github - 属性文件

java - 设置为不可编辑时如何在 JTextArea 中设置自动滚动?

java - 有什么方法可以在 Java 中模仿 Ruby 中的类实例变量概念吗?

java - 为什么 eclipse 告诉我静态方法引用 ClassName::staticMethod 应该为 "accessed in a static way"?

java - 如何强制 max 返回 Java Stream 中的所有最大值?

python - 如何确定函数是否已由 `lambda` 或 `def` 声明?

java - 自动将字符串转换为Java对象

oop - 对这个 "oop under-the-hood"计数器示例如何工作感到非常困惑