当前位置: 首页 > 知识库问答 >
问题:

Java Streams Api,有限流[重复]

曾喜
2023-03-14

我试图通过使用Java Streams API创建一个fibonacci序列。我已经创建了一个供应商,但我希望它停止在一个特定的值(例如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不是作为函数存在的,我使用它作为上下文的名称。

共有1个答案

汪信鸥
2023-03-14

最好的解决方案是使用TakeWhile,它在Java9+中可用:

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

如果您使用的是Java8,那么您可能需要研究阻止无限流的黑客

 类似资料:
  • 我们可以创建一个具有无限数据源(例如健康信号)的Java流吗?

  • 关于 Sentinel 限流功能,请点 这里 查看。 限流的场景 在应用的开发中,我们经常会遇到这样的一些场景,例如: 秒杀 抢红包 等等情况,这些业务都有一个明显的特征:并发量非常高。倘若没做好限流,往往会造成系统崩溃的情况。 限流的类型 在 Jboot 中,我们可以对某个url请求进行限流,也可以对某个java方法进行限流。 Jboot 提供了两种方案: TOKEN BUCKET : 令牌桶,

  • 实例: rate-limiting 限流是一种保护错误,避免服务被突发的或者大量的请求所拖垮。 这个插件使用 juju/ratelimit来限流。 使用 func NewRateLimitingPlugin(fillInterval time.Duration, capacity int64) *RateLimitingPlugin t来创建这个插件。

  • 限流与权限类似,因为它确定是否应该授权请求。 限流阀指示临时状态,并用于控制客户端可以对API进行的请求速率。 与权限一样,可能会使用多种限流方式。你的 API 可能对未经身份验证的请求进行限流,对经过身份验证的请求限流较少。 如果你需要对 API 的不同部分使用不同的限流策略,由于某些服务特别占用资源,你可能想要使用同时有多种限流策略的另一种方案。 如果你想要同时实现爆发限流率和持续限流率,也可

  • 概述 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 Sentinel 具有以下特征: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。 完备的实时

  • 为防止滥用,你应该考虑对您的 API 限流。 例如,您可以限制每个用户 10 分钟内最多调用 API 100 次。 如果在规定的时间内接收了一个用户大量的请求,将返回响应状态代码 429 (这意味着过多的请求)。 要启用限流, user identity class 应该实现 yii\filters\RateLimitInterface。 这个接口需要实现以下三个方法: getRateLimit(