java - 用于查找数字是否为合数的 Lambda 表达式

标签 java lambda

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/

相关文章:

Java Streams - 过滤先前过滤的值

java - 如何将 lambda 类型强制为特定类型?

java - 错误 R10(启动超时)-> Web 进程未能在启动后 60 秒内绑定(bind)到 $PORT - Heroku

java - JPA:一对一+自引用+双向

java - Java 中 Optional<T> 的 GC 开销

c# - 有没有办法在 string.contains() 方法中评估多个字符串?

java - 在 JUnit 测试中,有没有一种方法可以确保所有断言都已执行?

java - lambda 不需要异常处理

java - 为什么java中2^0返回2

java - 来自配置的 JBPM 服务任务分配输入