我需要创建某种 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,例如:Sets和 Lists在 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/