美文网首页
【Java8】以Supplier之名 打印Fibonacci数列

【Java8】以Supplier之名 打印Fibonacci数列

作者: 一个好汉 | 来源:发表于2021-09-13 22:32 被阅读0次

    讲道理
    一般我们想到斐波那契数列都会想起递归
    java8创建Stream
    除了

    • Stream.of()
    • Arrays.stream(new String[] { "A", "B", "C" });
    • 集合.stream()

    还有一个方法 那便是 Stream.generate(Supplier<String> sp);
    这种方法基于Supplier
    基于Supplier创建的Stream会不断调用Supplier.get()方法来不断产生下一个元素,这种Stream保存的不是元素,而是算法,它可以用来表示无限序列。

    今天我们来看看使用 如何使用 Supplier 打印这美妙的数列

    import java.util.function.LongSupplier;
    import java.util.stream.LongStream;
    
    class Scratch {
        public static void main(String[] args) {
            LongStream fib = LongStream.generate(new FibSupplier());
            // 打印Fibonacci数列:1,1,2,3,5,8,13,21...
            fib.limit(10).forEach(System.out::println);
        }
    
    }
    
    class FibSupplier implements LongSupplier {
        private long first = 0;
        private long second = 0;
    
        public long getAsLong() {
            if (first == 0) {
                first = 1;
                return 1;
            }
            if (second == 0) {
                second = 1;
                return 1;
            }
            long result = first + second;
            first = second;
            second = result;
            return result;
        }
    }
    

    输出结果:

    1
    1
    2
    3
    5
    8
    13
    21
    34
    55

    相关文章

      网友评论

          本文标题:【Java8】以Supplier之名 打印Fibonacci数列

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