使用lambda表达式的int的回文

时间:2018-04-22 14:30:41

标签: java-8 functional-programming palindrome

有没有更好的方法来查找整数是回文或不使用lambda表达式。我尝试过类似的东西,它有效,但寻找更好的方法。

public static boolean isPalindrome(int number) {

    return number == IntStream.iterate(number, i -> i / 10)
        .map(n -> n % 10)
        .limit(String.valueOf(number).length())
        .reduce(0, (a, b) -> a = a * 10 + b);
}

1 个答案:

答案 0 :(得分:2)

有一种更简单的方法来查找整数是否是回文,但由于这个问题仅限于使用lambda表达式,因此我只建议改进当前的解决方案。

不幸的是,使用JDK-8,您需要使用limit来截断无限流。但是,从JDK-9开始,有一个带有签名的iterate方法:

static <T> Stream<T> iterate(T seed,
                             Predicate<? super T> hasNext,
                             UnaryOperator<T> next)

因此,您现在可以执行以下操作,而不是执行.limit(String.valueOf(number).length())

return number == IntStream.iterate(number, n -> n != 0, i -> i / 10)
                          .map(n -> n % 10)
                          .reduce(0, (a, b) -> a * 10 + b);

请注意,在a = a * 10 + b中执行reduce是多余的,因此我已将其更改为a * 10 + b,如上所示。