Dub*_*zar 5 java loops java-8 java-stream
如何用新的Java Stream API替换此代码:
int n = someFunction(); // n > 0
for (int i = 3; i * i <= n; i += 2)
System.out.print(i);
Run Code Online (Sandbox Code Playgroud)
我试过用IntStream.iterate(3, i -> i + 2),但我不能添加停止条件.
据我所知,我不能.limit(int)在这里使用方法.
有任何想法吗?
你可以使用limit(int):你必须确定3到2之间的元素数量sqrt(n).确切的(sqrt(n) - 3) / 2 + 1元素,所以你可以写:
IntStream.iterate(3, i -> i + 2).limit((int) (Math.sqrt(n) - 3) / 2 + 1);
Run Code Online (Sandbox Code Playgroud)
话虽如此,您还可以创建一个从3到3的闭合范围sqrt(n)并过滤掉偶数值,如下所示:
IntStream.rangeClosed(3, (int) Math.sqrt(n)).filter(i -> i % 2 > 0)
Run Code Online (Sandbox Code Playgroud)