从BigIntegers流中过滤素数

时间:2016-01-29 20:43:42

标签: java lambda java-stream biginteger

如何在不使用isProbablePrime()函数的情况下从java中的BigIntegers流中过滤素数?

我尝试了这段代码但无法解决错误:

List<BigInteger> x =bigIntList.stream().filter(n->n >1 && IntStream.range(2,n).noneMatch(index->n%index==0)).collect(Collectors.toList());

1 个答案:

答案 0 :(得分:1)

这样的事情应该会有所帮助:

public static boolean isBigPrime(BigInteger n) {
    if (n.compareTo(new BigInteger("2")) < 0) return false;
    else if (n.compareTo(new BigInteger("2")) == 0) return true;
    for (BigInteger i = new BigInteger("2"); i.compareTo(n.divide(new BigInteger("2"))) < 0; i = i.add(BigInteger.ONE))
        if (n.mod(i).equals(BigInteger.ZERO))
            return false;
    return true;
}

有关详情,请参阅here

这就是你使用Stream的方式。

List<BigInteger> prime = l.stream().filter(b -> b.isProbablePrime(1) == true ).collect(Collectors.toList());