java - 在 Java 8 中将 while 循环转换为流

标签 java java-8 functional-programming java-stream

作为练习,我将一些旧代码转换为功能流。我对流了解不多。转换这段代码似乎应该很简单,但我运气不佳。该方法从给定的整数开始,将其传递给 isPrime,如果它是质数,则返回 true。然后交出要打印的新(下一个)质数。如果 isPrime 为假,则 i 递增,我们检查下一个整数。

private static int nextPrime(final int number) {
    int i = number + 1;

    while (!isPrime(i)) {
        i++;
    }

    return i;
}

最佳答案

除了利用并行性之外,我认为没有理由为此使用 Stream(如果素数恰好相距很远,但在 int 中则不然 边界,所以基本上没有任何好处)。

您可以迭代升序整数(从 number + 1 开始)的 IntStream 并仅过滤质数。当不可避免地找到一个时,您可以返回第一个。

private static int nextPrime(final int number) {
    return IntStream.iterate(number + 1, i -> i + 1)
                    .filter(Test::isPrime)
                    .findFirst()
                    .getAsInt();
}

注意:我用来测试这个的类称为 Test,如方法引用所示。您应该将其更改为您的类(class)名称。

关于java - 在 Java 8 中将 while 循环转换为流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49076314/

相关文章:

java - (JAVA战舰)按钮/图像网格工作正常,但是当我在旁边添加第二个网格时,它们都会变得困惑

java - 将 Excel 文件合并到单个工作簿中

java - Java TrayIcon.setToolTip()使具有128个字符的String上的JVM崩溃

java - 获取 LinkedHashMap 中每个条目的最后一个元素?

generics - Ramda 的 Flow 类型中的柯里化(Currying)函数定义

functional-programming - 方案减少麻烦

java - ArrayList 包含来自另一个 ArrayList 的一个或多个实体

Java 8 并行流并发分组

java - 错误: incompatible types: inference variable R has incompatible bounds (Lambda java 8)

recursion - 如何在 Scheme/Racket 中使用尾递归实现追加过程?