讲道理
一般我们想到斐波那契数列都会想起递归
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