首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java流Api,有限流

Java流Api,有限流
EN

Stack Overflow用户
提问于 2018-11-07 17:28:20
回答 2查看 346关注 0票数 1

我试图通过使用Java来创建fibonacci序列。我已经创建了一个供应商,但我希望它在一个特定的值(例如1000000)停止。

最棒的:

代码语言:javascript
复制
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;
    }
}

我想要的是:

代码语言:javascript
复制
Stream.generate(new FibonacciSupplier()).maxValue(1000000);

maxValue不是作为一个函数存在的,我使用它作为上下文的名称。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-07 17:43:14

最好的解决方案是使用takeWhile,这在9+中是可用的:

代码语言:javascript
复制
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

票数 3
EN

Stack Overflow用户

发布于 2018-11-07 17:34:19

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

代码语言:javascript
复制
Stream.generate(new FibonacciSupplier()).limit(1000).forEach(System.out::println);

从医生那里,

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53194714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档