java bitsieve_Java 8:流和Eratosthenes的Sieve

当然,有可能,但由于Java流没有简单的方法被分解到它们的头部和它们的尾部(你可以很容易地获得其中任何一个,但不是两个都可以,因为流已经被消费了然后 – 听起来有人可以使用线性类型……).

解决方案是保持可变变量.例如,该可变变量可以是测试数字是否是目前为止看到的任何其他数字的倍数的谓词.

import java.util.stream.*;

import java.util.function.IntPredicate;

public class Primes {

static IntPredicate isPrime = x -> true;

static IntStream primes = IntStream

.iterate(2, i -> i + 1)

.filter(i -> isPrime.test(i))

.peek(i -> isPrime = isPrime.and(v -> v % i != 0));

public static void main(String[] args) {

// Print out the first 10 primes.

primes.limit(10)

.forEach(p -> System.out.println(p));

}

}

然后,您得到预期的结果:

$javac Primes.java

$java Primes

2

3

5

7

11

13

17

19

23

29

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值