有没有更好的方法来查找整数是回文或不使用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);
}
答案 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
,如上所示。