我只想在java 8的Stream API中实现多个if else条件或者给定代码。
使用递归逻辑的最大公约数代码 - :
if(a == b)
return a;
if(a%b == 0)
return b;
if(b%a == 0)
return a;
if(a>b)
return (gcd(a%b,b));
else
return(gcd(a,b%a));
// gcd (int a,int b) is a function
答案 0 :(得分:3)
Streams不是替换递归或迭代的好选择,其中每次迭代的状态取决于前一次迭代。你可以使用Streams,但正如你所看到的,它非常可怕。
public static int gcd(int a, int b) {
int[][] pair = {{a, b}};
return IntStream.of(
IntStream.range(0, Math.min(a, b))
.mapToObj(i -> pair[0] = (pair[0][0] > pair[0][1]
? new int[]{pair[0][0] % pair[0][1], pair[0][1]}
: new int[]{pair[0][0], pair[0][1] % pair[0][0]}))
.filter(p -> p[0] == 0 || p[1] == 0)
.findAny().orElse(new int[2]))
.max()
.orElse(0);
}