java - Java Streams Api,有限流
问题描述
我正在尝试通过使用 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 不作为函数存在,我将其用作上下文的名称。
解决方案
最好的解决方案是使用takeWhile
,它在 Java 9+ 中可用:
Stream.generate(new FibonacciSupplier())
.takeWhile(i -> i <= 1000000) //will stop stream when value exceeds given limit
.forEach(System.out::println);
如果您使用的是 Java 8,那么您可能需要研究阻止无限流的技巧