【发布时间】:2015-07-29 00:28:04
【问题描述】:
我有一个List<int[]> 作为index_position:int[] values
input:
index 0:{1,2}
index 1:{1,3,5}
index 2:{2}
无论是否使用 Lambda,我如何在 Java 中获得以下组合。
第一步:找出所有这样的组合
[{1,1,2}, {1,3,2}, {1,5,2}, {2,1,2}, {2,3,2}, {2,5,2}]
->
Step2:从已获得的组合中删除重复项
[{1,2}, {1,3,2}, {1,5,2}, {2,1}, {2,3}, {2,5}]
“想要在每个步骤中执行,例如从 n 个数组生成所有 n 个元素子集 >其中第一个元素来自第一个数组,第二个来自第二个数组...,>从每个结果子集中删除重复项。”
不需要进一步减少
[{1,2}, {1,2}]
到
[{1,2}]
或
[{1,2},{2,1}]
到
[{1,2}] / [{2,1}]
但在我的情况下也不会影响结果。
【问题讨论】:
-
这不是 Java 语法意义上的
List对象。您能否发布创建此列表的代码或至少描述此列表的结构? -
并描述你所谓的“减少”的规则。我不知道第二个列表与第一个列表有什么关系!
-
请edit您的帖子并更正您的示例。有时相同的输出可能是不同操作的结果。因此,我们宁愿不假设您正在尝试做什么,所以您应该准确地在每个步骤中执行您想要执行的操作,例如 generate all n element subset from n 个数组,其中第一个元素来自第一个数组,第二个来自第二个数组...,从每个结果子集中删除重复项。您是否还想删除重复的子集,例如
{1,2} {1,2},或者甚至是{1,2} {2,1}? -
您的每个步骤都应该成为单独的问题(可能已经在 SO 上提出过问题,所以现在尝试搜索资源)。无论如何,我们仍然不知道非常重要的信息,即:您的阵列数量总是 3 还是可以有更多?根据这些信息,我们可以选择是否可以简单地使用三个循环(或内部流)来完成,或者我们是否需要一些递归解决方案。
-
我们可以假设每个
int[]都包含唯一的数字吗?换句话说index 0:可以是{1,1,2}吗?
标签: java arrays lambda functional-programming