美文网首页
Java-Stream实现生成质数的无限流

Java-Stream实现生成质数的无限流

作者: _Zy | 来源:发表于2021-04-15 11:43 被阅读0次

思路:
使用Strream.generate方法

代码实现IntSupplier,而不是用Lambda表达式,是为了在get方法外定义共有变量用于存储已有质数列表。
当调用forEach进行流运算时,底层是不断调用primeSupplier的getAsInt()方法,在每调用一次就生成一个新质数,并且加到质数列表变量中。

如果直接使用Lambda表达式,那() -> {} ,括号内部是getAsInt()的方法实现,无法在内部类定义公有变量。那么就只能在外部定义公有变量了,这样做就不优雅了。

        // 埃氏筛选法找质数
        IntSupplier primeSupplier = new IntSupplier() {
            private int currPrime = 2;
            private List<Integer> primeList = new ArrayList<>();
            @Override
            public int getAsInt() {
                if(!primeList.isEmpty()){
                    boolean notFind = true;
                    while(notFind){
                        currPrime++;
                        notFind = primeList.stream().anyMatch(n -> currPrime%n==0);
                    }
                }
                primeList.add(currPrime);
                return currPrime;
            }
        };
        IntStream.generate(primeSupplier).limit(10).forEach(System.out::println);

运行结果:

2
3
5
7
11
13
17
19
23
29

相关文章

  • Java-Stream实现生成质数的无限流

    思路:使用Strream.generate方法 代码实现IntSupplier,而不是用Lambda表达式,是为了...

  • 生成质数

    参考资料:https://leetcode-cn.com/problems/count-primes/soluti...

  • 质数问题

    生成n个质数的程序:

  • Guava RateLimiter的实现

    限流 高并发系统有三大利器:缓存 、限流 、降级。对于限流的实现,有多种算法:计数器,漏桶法,令牌桶法。计数器法无...

  • 质数生成代码

  • PHP中接口限流实现

    代码中实现单个用户限流,uid换为接口名,即可实现接口限流

  • 限流降级方案

    限流算法 并发数限流 计数器并发数限流:使用共享变量实现 信号量:使用java中的Semaphore QPS限流 ...

  • Semaphore CountDownLatch CyclicB

    限流可分为并发限流和速率限流。 Semaphore就属于并发限流的实现。 插句话:速率限流一般限的是QPS,即一秒...

  • 聊聊高并发系统之限流特技-2

    摘要:上一篇《聊聊高并发系统限流特技-1》讲了限流算法、应用级限流、分布式限流;本篇将介绍接入层限流实现。 接入层...

  • RateLimiter-源码分析

    一、前言 在分布式系统中,实现高可用有三大利器: 限流 降级 熔断我们先对限流来进行一个分析。 二、限流的实现 业...

网友评论

      本文标题:Java-Stream实现生成质数的无限流

      本文链接:https://www.haomeiwen.com/subject/nmjdlltx.html