java - 创建所有可能的元素组合

标签 java algorithm performance java-stream

我需要创建某种 Key 的所有可能组合,它由 X(在我的例子中为 8)组成,同样重要的元素。所以我想出了这样的代码:

final LinkedList<Key> keys = new LinkedList();

firstElementCreator.getApplicableElements() // All creators return a Set of elements
          .forEach( first -> secondElementCreator.getApplicableElements()
           .forEach( second -> thirdElementCreator.getApplicableElements()
            // ... more creators
           .forEach( X -> keys.add( new Key( first, second, third, ..., X ) ) ) ) ) ) ) ) );

return keys;

它正在工作,但是有 X 嵌套 forEach,我觉得我错过了一个更简单/更好/更优雅的解决方案。有什么建议么? 提前致谢!

最佳答案

它是笛卡尔积吗?许多库提供 API,例如:SetsLists在 Guava 中:

List<ApplicableElements> elementsList = Lists.newArrayList(firstElementCreator, secondElementCreator...).stream()
        .map(c -> c.getApplicableElements()).collect(toList());

List<Key> keys = Lists.cartesianProduct(elementsList).stream()
        .map(l -> new Key(l.get(0), l.get(1), l.get(2), l.get(3), l.get(4), l.get(5), l.get(6), l.get(7))).collect(toList());

关于java - 创建所有可能的元素组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46472212/

相关文章:

multithreading - 并行运行多个 ANTLR4 词法分析器/解析器实例

java - equalsIgnoreCase() 与 toUpperCase().equals 和 toLowerCase().equals 的效率

c# - 提高应用程序性能

java - MySQL java servlet 和 JPA

java - 向 logger.error 抛出新的异常

c - 从数据流 : 中选择前 k 个(百分比)项目的有效算法

python - 统计机器翻译的短语提取算法

algorithm - 程序集处理三角矩阵存储器的算法

java - TreeSets 和抽象类?

java - 如何将 IN 与 JPA CriteriaBuilder 结合使用