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

有没有办法检查Java中的流是否是有限的?[闭门]

左丘善
2023-03-14

我知道Java中有无限的流。

有没有办法检查流是否有限?

类似这样的方法ISSTREAMFINIT(流

@Test
public void testStreamFinity() {
    assertFalse(isStreamFinite(generateLong()));
}

private <T> boolean isStreamFinite(Stream<T> stream) {
    if (stream.count() < Long.MAX_VALUE) {
        return true;
    }
    return false;
}

private Stream<Long> generateLong() {
    return LongStream.generate(() -> new Random().nextLong()).boxed();
}

溪流的建设会留下一些痕迹/轨迹,我们可以用来追溯检查它?

检查方法能否始终可靠地按预期工作?

当我试图通过检测流的isFinite来解决问题时,我错了。它似乎不像答案中提到的那样稳定/可靠。我会在另一个环境中重构我的解决方案。谢谢你的帮助~


共有2个答案

益阳平
2023-03-14

没有办法确定一个流是否是无限的,但有办法确定它是否是有限的。

[修正]我搞错了。

/**
 * When this returns {@code true}, the stream is finite for sure. Otherwise the
 * stream could be either infinite or finite.
 */
private static <T> boolean isStreamFinite(Stream<T> stream) {
    return stream.spliterator().estimateSize() != Long.MAX_VALUE;
}

估计大小()的Javadoc:

返回forEachRemaining遍历将遇到的元素数的估计值,或返回Long。最大值如果无限、未知或计算成本太高。

羊舌源
2023-03-14

没有可靠的方法可以做到这一点。即使使用estimateSize,它也有文档记录:

... 或者长时间返回。如果无限、未知或计算成本太高,则为最大值。

所以仅仅依靠Long这个事实。MAX_VALUE会告诉你这个流是无限的还是非无限的——这完全是错误的。

另一个建议是使用大小,这同样是错误的:

IntStream.generate(() -> 1).limit(5)

您知道这是一个SIZED流-实现不会也不会报告大小标志。

一句话:你不能用可靠的方式。理论上,这在某些情况下是可能的,比如当您只使用generate而不限制或短路流时,实现可能会注册一个标志,比如IS_INFINITE或其他什么,但这个IMO将是无用的,可能在99%的情况下。

你也可以反过来想,当你想确定这条流是否是有限的时,怎么样?在这种情况下,getExactSizeIfKnown()会告诉您这一点。

 类似资料:
  • 问题内容: 我正在使用Python中的subprocess.Popen启动许多子流程。我想检查一个这样的过程是否已经完成。我发现了两种检查子流程状态的方法,但似乎都可以迫使流程完成。一种是使用process.communicate()并打印返回代码,如解释在这里。另一种方法是简单地调用process.wait()并检查它是否返回0。 有没有一种方法可以检查进程是否仍在运行,而无需等待进程完成? 问

  • 我想检查一下“安全 但是我得到了这个错误:“系统事件出错:脚本编辑器不允许辅助访问。”进程“系统偏好设置”窗口1中的数字-1719 我希望能够在客户机上执行这段代码,所以我不想在可访问性中添加脚本编辑器。 我的问题是,有没有一种方法(objective-c、c或appleScript)来检查选项卡是否被锁定?

  • 你好,我坐在一个小型的Java图书交换程序上,我想进一步了解编程,所以我的问题是 我现在有这个了 (buchRegal[0]==“” buchRegal[0]是字符串数组中的一个位置,buchRegal_id是int数组的一部分。通过这段代码,我了解到我可以检查数组[0]中的一个位置是否为空,现在的问题是我希望它检查其中是否有内容,如果是,我希望它移动到数组的下一部分,即数组[0],并将其放置在那

  • 问题内容: 我知道可以用来从外壳检查给定的二进制文件,但是有可能在一个进程中执行此操作吗? 类似于(我完全组成了系统调用): 我正在尝试在我们的代码库中诊断一些可疑的SO链接问题,并且希望在可能的情况下以这种方式检查RPATH(我宁愿不必生成外部脚本)。 问题答案:

  • 我有一些微服务和使用Spring Cloud的网关。我正试图在网关中设置路由。理想情况下,我想在YML文件中设置路由,或者使用RouteLocator bean。 但目前,在我的网关中,每个路由都有RESTendpoint,这只是使用WebClient向前发送请求。 (在此之前,我有一个ReactiveAuthenticationManager过滤器,用于验证JWT令牌。它返回一个Username

  • 例如: 在上面的json中,我想检查这个json路径我不担心价值。 我可以用来完成吗?我以前使用过Stefan Goessner的库,但现在已经很旧了。 我想要Python中类似于此但不存在的东西()