어떻게 정수의 숫자를 반대 하는가?

YM :
public static int reverse(int n) {
    int result = 0;
    while (n > 0) {
        result = result * 10 + n % 10;
        n = n / 10;
    }
    return result;
}

나는 정수의 숫자를 반대하기 위해 노력하고있어. 대신 내가 한 일을 같은 코드를 수행하는, 그것을 할 수있는 다른 방법은 무엇입니까? 난 자바 스트림을 사용하여 반전 할 수 있습니까?

그들은했다 :

OK, 여기에 재미있는 구현입니다 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, 반전 된 결과 오버플 않습니다.

또한 부정적인 입력을 지원하지 않습니다.

추천

출처http://43.154.161.224:23101/article/api/json?id=177085&siteId=1