private static boolean isCompositeLambda(int number) {
return number > 3 && Stream.iterate(2, i -> i + 1)
.filter(x -> number % x == 0)
.limit((long) Math.sqrt(number))
.count() > 0;
}
当我给出 5 时,它会进入无限循环。 谁能给出正确的代码
最佳答案
您有两个问题,首先应用过滤器,第二个是限制是值的数量,而不是值本身。
它会进入一个很长(但不是无限)的循环,因为它需要很长时间才能生成数字限制。例如对于 5,它尝试获取 2 个数字 ((long) Math.sqrt(5)) == 2L,但是要在 number == x
时实现第一个解决方案,它必须检查另外约 40 亿个数字溢出并达到 -number
之前的值以获得第二个解决方案并达到限制。即 5 % 5 == 0 和 5 % -5 == 0
更简单的解决方案是
private static boolean isCompositeLambda(int number) {
return number > 3 &&
IntStream.rangeClosed(2, (int) Math.sqrt(number))
.anyMatch(x -> number % x == 0);
}
关于java - 用于查找数字是否为合数的 Lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44084962/