Java流计数操作,直到整数变为0

时间:2018-11-17 05:49:44

标签: java java-stream

在给定一个整数N的情况下,如何使用Java Stream,如果N为奇数,则从中减去1,如果N为偶数,将其除以2,直到N变为0?

这是我使用程序样式的工作代码:

public static int solution(int num) {
    int counter = 0;
    while(num != 0) {
        num = (num % 2 == 0) ? num / 2 : num - 1;
        counter++;
    }

    return counter;
}

2 个答案:

答案 0 :(得分:6)

您可以按照相同的逻辑使用IntStream.iterate

public static long solutionStream(int num) {
    return IntStream.iterate(num, i -> i % 2 == 0 ? i / 2 : i -1)
            .takeWhile(i -> i > 0)
            .count();
}

请注意,takeWhile仅在Java 9+中可用,在这里有必要结束iterate产生的无限流。

答案 1 :(得分:3)

在Java9 +中,alternative to ernest's solution可能正在使用IntStream iterate(int seed, IntPredicate hasNext, IntUnaryOperator next)如下:

public static int solution(int num) {
    return (int) IntStream.iterate(num, i -> i > 0, i -> i % 2 == 0 ? i / 2 : i - 1).count();
}