在给定一个整数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;
}
答案 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();
}