以前做項目的時候計算笛卡爾積的時候,總是使用各種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<character> charlist = immutableset.of(</code><code>'a'</code><code>, </code><code>'b'</code><code>, </code><code>'c'</code><code>);</code>
<code> </code><code>set<list<character>> set = sets.cartesianproduct(charlist, charlist, charlist);</code>
<code> </code><code>for</code> <code>(list<character> 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]