在 Java 8 中使用函数式编程生成字母序列是一个很大的挑战。Lukas Eder 愉快地接受了这个挑战,他将告诉我们如何使用 Java 8 来生成ABC的序列——当然,肯定不是一种蹩脚的方式。
我被 Stack Overflow 上网友“mip”提的一个有趣的问题给难住了。该问题是:
我正在寻找一种生成下列字母序列的方式:
A, B, C, …, Z, AA, AB, AC, …, ZZ.
到现在为止,没有一个答案是使用 Java 8 的函数式编程实现的,因此我接受此挑战。我将使用 jOOλ,因为 Java 8 的 Stream API 提供的功能不足以完成该任务(我承认我错了——非常感谢 Sebastian 对这个问题的有趣解答)。
首先,我们用函数的方式分解这个算法。我们所需要的组件有:
1、一个(可重复)的字母表。
2、一个上界,例如想生成多少个字母。如要求生成序列ZZ,那上界就是2。
3、一种将字母表中的字母与先前生成的字母联合成一个笛卡尔积(cartesian product)的方法。
让我们看一下代码:
1、生成字母表
我们可以这样写入字母表,如:
List<String> alphabet = Arrays.asList("A", "B", ..., "Z");
但这很差劲。我们使用 jOOλ 代替:
List<String> alphabet