java - 获取列表元素的组合列表

标签 java combinatorics

假设我有 3 个列表:['q','w']、['a','s']、['z','x']。如何从这些列表中获取可能组合的列表?所以我得到一个列表 [['q','a','z'],['q','s','z']] 等等。我为两个创建了一个方法,但无法为 N 个列表找到一个:

static <E> ArrayList combine(ArrayList<E> one,ArrayList<E> two)
{
    ArrayList<ArrayList<E>> combs=new ArrayList<ArrayList<E>>();
    for(E e:one)
    {
        for(E e2:two)
        {
            ArrayList ps=new ArrayList();
            ps.add(e);
            ps.add(e2);
            combs.add(ps);
        }
    }
    return combs;
}

我发现这是由 Guava 的 Sets.cartesianProduct 完成的。

最佳答案

对于懒惰的人(使用 Guava):

Set<List<String>> result = Sets.cartesianProduct(
                ImmutableSet.of("q", "w"),
                ImmutableSet.of("a", "s"),
                ImmutableSet.of("z", "x")
        );

System.out.println(result);

输出:

[ [q, a, z], [q, a, x], [q, s, z], [q, s, x], [w, a, z], [w, a, x], [w, s, z], [w, s, x] ]

关于java - 获取列表元素的组合列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41879811/

相关文章:

java - Full GC 后 socket 连接变慢的原因是什么?

java - JUnit测试用例中 'fail'的实际用途是什么?

java - 使用 JDBC 连接到安全数据库

java - 通过hibernate从数据库读取数据

scala - 如何编写一个表达式来生成所有可能的对(无论顺序如何)?

Java - 使用 while 循环丢失第一个用户输入

algorithm - 从 n 元组中生成所有可能的序列

python - 按类别创建项目列表的受限排列

arrays - 返回可能重复的数组元素的所有唯一排列

r - 大小为 K 的整数分区