【发布时间】:2018-06-25 15:12:03
【问题描述】:
我知道 Java 中有 infinite 流。
有没有办法检查流是否有限?
类似这种方法isStreamFinite(Stream<T> stream)?
@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();
}
Stream 的构造会留下一些标记/轨迹,我们可以用来追溯检查它吗?
检查方法能否始终如期可靠地工作?
更新
当我试图通过检测流的isFinite 来解决问题时,我错了。正如上面提到的答案,它似乎不稳定/可靠。我将在另一个周围重构我的解决方案。谢谢你的帮助~
【问题讨论】:
-
c.f. en.wikipedia.org/wiki/Halting_problem 一般无法解决。只确定流是如何构造的。
-
你的方法返回了吗?
-
哈哈,当然不是~这只是一个演示,提供我正在尝试做的事情。
-
我认为当绝对知道某个流是无限的时可能会引入一个标志,例如
generate;但这真正的价值是什么?例如,Files.lines怎么样,您的文件是“有限”文件吗?我不知道为什么需要这个。除了无限流之外,Long.MAX_VALUE在许多其他情况下也有报道......
标签: java java-8 java-stream