【发布时间】:2018-02-12 19:29:43
【问题描述】:
我已经为这个答案寻找了一段时间,但找不到任何东西。
我正在尝试创建一个可以非常快速地找到素数的 IntStream(很多很多素数,非常快——几秒钟内数百万)。
我目前正在使用这个并行流:
import java.util.stream.*;
import java.math.BigInteger;
public class Primes {
public static IntStream stream() {
return IntStream.iterate( 3, i -> i + 2 ).parallel()
.filter( i -> i % 3 != 0 ).mapToObj( BigInteger::valueOf )
.filter( i -> i.isProbablePrime( 1 ) == true )
.flatMapToInt( i -> IntStream.of( i.intValue() ) );
}
}
但是生成数字需要很长时间。 (生成 1,000,000 个素数需要 7546 毫秒)。
有什么明显的方法可以提高效率/速度吗?
【问题讨论】:
-
在尝试提出更多问题之前,请阅读How do I ask a good question?。
-
买一台更快的电脑:p
-
最明显的方法是不使用流。
-
@shmosel 对此一无所知,他似乎确实有足够的数据来实际利用
parallel,如果没有流,这将不是那么容易 -
只是一种风格说明:从不使用
… == true。.flatMapToInt( i -> IntStream.of( i.intValue() ) )的目的到底是什么?为什么不直接使用.mapToInt(i -> i.intValue())或.mapToInt(BigInteger::intValue)?
标签: java parallel-processing java-stream primes