美文网首页
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实现生成质数的无限流

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