Java Streams Api,有限流

Java Streams Api,有限流,java,java-8,java-stream,Java,Java 8,Java Stream,我试图通过使用JavaStreamsAPI创建斐波那契序列。我已经创建了一个供应商,但我希望它停止在一个特定的值(例如1000000) 供应商: import java.util.function.Supplier; public class FibonacciSupplier implements Supplier<Integer> { private int current; private int next; public FibonacciSup

我试图通过使用JavaStreamsAPI创建斐波那契序列。我已经创建了一个供应商,但我希望它停止在一个特定的值(例如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;
    }
}

maxValue不作为函数存在,我将其用作上下文的名称。

您需要在流上使用
.limit()
方法,如下所示:

Stream.generate(new FibonacciSupplier()).limit(1000).forEach(System.out::println);
从文件来看

返回由此流的元素组成的流,截断 长度不超过{@code maxSize}


最好的解决方案是使用Java 9+中提供的
takeWhile

Stream.generate(new FibonacciSupplier())
    .takeWhile(i -> i <= 1000000) //will stop stream when value exceeds given limit
    .forEach(System.out::println);
Stream.generate(新的FibonacciSupplier())

.takeWhile(i->i)您是否尝试过使用
if
语句?
if(value>1000000){dontDo();}
限制
可能就是你需要的。这就是你需要的吗?如果你知道这个问题存在,为什么不作为一个复制品关闭这个呢?
java9中的takeWhile
将完成这项工作……是和否。限制元素的数量。一旦序列超过某个值,他就想停止。你怎么知道fib数1000000是元素1000吗?
Stream.generate(new FibonacciSupplier())
    .takeWhile(i -> i <= 1000000) //will stop stream when value exceeds given limit
    .forEach(System.out::println);