我正在尝试在Java中实现这个问题的接受答案:从超过2个整数的集合中找出最大公约数,但我不知道如何实现聚合函数。
使用Java 8时,有一个一行代码的解决方案:
public class GCD {
public static void main(String[] args) {
int[] ints = { 42, 21, 14, 70 };
System.out.println(gcd(ints));
}
public static int gcd(int[] ints) {
return Arrays.stream(ints).reduce((a, b) -> gcd(a, b)).getAsInt();
}
public static int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
}
输出结果为"7"。这个聚合函数被称为缩减函数。
另一种方式:Lambda也可以用方法引用来编写。
public static int gcd(int[] ints) {
return Arrays.stream(ints).reduce(GCD::gcd).getAsInt();
}