【发布时间】:2012-06-01 15:09:01
【问题描述】:
我一直在查看很多关于 Java 排列的不同帖子,但没有一个符合我的要求,所以我决定发布。
所以我有 2 个List<Integer>,我需要生成所有 排列对,其中 没有重复,其中一个元素在第一个列表中,第二个第二个列表中的一个。
例如,如果我有:
List<Integer> l1 = Arrays.asList(new Integer[] {1, 2, 3});
List<Integer> l1 = Arrays.asList(new Integer[] {2, 3, 4});
然后我想输出:
(1, 2), (1, 3), (1, 4), (2, 2), (2, 3), (2, 4), (3, 3), (3, 4)
注意 (3, 2) 不在这里,因为我已经有了 (2, 3)
我找不到任何图书馆可以做一些远程关闭的事情,我发现 guava 与 Permutations 有类似的东西,但它似乎最近已经停产了。
另外,我不想将列表存储在内存中,因为它可能非常大,我只需要一次迭代一对,所以我试图找到生成它们的方法 在飞行中。我正在考虑实现Iterable<Pair>,但我似乎无法编写任何看起来有效的东西。
如果您知道已经在做这类事情的库,那也会很有帮助!
【问题讨论】:
-
如果不将一些东西存储在内存中以确定哪些对已经被看到,我认为这是不可行的。无论如何,您指的是哪种番石榴?我不认为我们已经“停止”了这些方面的任何东西......
-
我错了,但我认为您的意思是集合,而不是排列。排列关心顺序,因此您可以按不同顺序保存值,并且它们不被认为是等效的。集合不关心顺序,只关心其中的内容。不确定这是否会帮助您找到解决方案,但认为它可能会。
标签: java permutation