首页 > 解决方案 > 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 不作为函数存在,我将其用作上下文的名称。

标签: javajava-8java-stream

解决方案


最好的解决方案是使用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,那么您可能需要研究阻止无限流的技巧


推荐阅读