如何使用Java 8 Stream API编写多个if-else语句?

时间:2018-03-31 09:04:15

标签: java-8

我只想在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

1 个答案:

答案 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);
}