我正在尝试通过使用Java Streams API创建斐波那契序列。我已经创建了一个供应商,但希望它停止在特定值(例如1000000)。
前者:
import java.util.function.Supplier;
public class FibonacciSupplier implements Supplier<Integer> {
private int current;
private int next;
public FibonacciSupplier() {
current = 0;
next = 1;
}
@Override
public Integer get() {
int result = current;
current = next + current;
next = result;
return result;
}
}
我希望它是:
Stream.generate(new FibonacciSupplier()).maxValue(1000000);
maxValue作为函数不存在,我将其用作上下文的名称。
答案 0 :(得分:3)
最好的解决方案是使用Java 9+中可用的takeWhile
:
Stream.generate(new FibonacciSupplier())
.takeWhile(i -> i <= 1000000) //will stop stream when value exceeds given limit
.forEach(System.out::println);
如果您使用的是Java 8,则可能需要研究hacks for stopping an infinite stream
答案 1 :(得分:0)
您将需要在流上使用.limit()
方法,如下所示:
Stream.generate(new FibonacciSupplier()).limit(1000).forEach(System.out::println);
从文档中
返回由该流的元素组成的流,被截断 长度不得超过{@code maxSize}。