Операция подсчета потока Java, пока целое число не станет 0 - PullRequest
0 голосов
/ 17 ноября 2018

Как использовать Java Stream, учитывая целое число N, из действий которого, если 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 голосов
/ 17 ноября 2018

С Java9 + альтернативой решения Эрнеста может быть использование 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();
}
0 голосов
/ 17 ноября 2018

Вы можете использовать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...