ОК, вот забавная реализация с IntStream
:
public static int reverse (int n) {
return IntStream.iterate (n, i -> i/10) // produces a infinite IntStream of n, n/10,
// n/100, ...
.limit(10) // 10 elements are sufficient, since int has <= 10 digits
.filter (i -> i > 0) // remove any trailing 0 elements
.map(i -> i % 10) // produce an IntStream of the digits in reversed
// order
.reduce (0, (r,i) -> r*10 + i); // reduce the reversed digits back
// to an int
}
Например, для входа 123456789 сначала будет сгенерировано бесконечное IntStream
:
123456789,12345678,1234567,123456,12345,1234,123,12,1,0,0,...
Ограничив 10 элементов и удалив 0, мы получим:
123456789,12345678,1234567,123456,12345,1234,123,12,1
После сопоставления каждого элемента его последней цифре мы получим:
9,8,7,6,5,4,3,2,1
Теперь нам осталось толькоуменьшите IntStream
аналогично тому, что вы делали в своем вопросе - добавьте каждый элемент к промежуточному результату, умноженному на 10:
((((0 * 10 + 9) * 10 + 8) * 10 + 7) * 10 ....) * 10 + 1
Обратите внимание, что если входной номер состоит из 10 цифр и последней цифры> 1, обратный результат будет переполнен.
Он также не поддерживает отрицательный ввод.