天天看点

使用Guava来计算笛卡尔积

以前做项目的时候计算笛卡尔积的时候,总是使用各种for循环来嵌套,最后往往在sonar代码检查的时候总是会报警说for循环嵌套过深。

今天才知道guava原来已经为我们提供了优雅的计算笛卡尔积的方法。

比如我们要计算3个list的笛卡尔积,每个list的内容都是['a', 'b', 'c'], 请看下面的代码:

1

2

3

4

5

6

7

8

9

10

<code>public</code> <code>class</code> <code>cartesianproductutil {</code>

<code>    </code><code>public</code> <code>static</code> <code>void</code> <code>main(string[] args) {</code>

<code>        </code><code>immutableset&lt;character&gt; charlist = immutableset.of(</code><code>'a'</code><code>, </code><code>'b'</code><code>, </code><code>'c'</code><code>);</code>

<code>        </code><code>set&lt;list&lt;character&gt;&gt; set = sets.cartesianproduct(charlist, charlist, charlist);</code>

<code>        </code><code>for</code> <code>(list&lt;character&gt; characters : set) {</code>

<code>            </code><code>system.out.println(characters);</code>

<code>        </code><code>}</code>

<code>    </code><code>}</code>

<code>}</code>

  输出为:

[a, a, a]

[a, a, b]

[a, a, c]

[a, b, a]

[a, b, b]

[a, b, c]

[a, c, a]

[a, c, b]

[a, c, c]

[b, a, a]

[b, a, b]

[b, a, c]

[b, b, a]

[b, b, b]

[b, b, c]

[b, c, a]

[b, c, b]

[b, c, c]

[c, a, a]

[c, a, b]

[c, a, c]

[c, b, a]

[c, b, b]

[c, b, c]

[c, c, a]

[c, c, b]

[c, c, c]