我知道在Java中有一个无限流的概念。
是否有一种方法可以检查流是有限的还是无限的?
类似于这个方法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();
}
建立数据流会留下一些痕迹,我们可以利用这些痕迹进行跟踪检查吗?
检查方法能够始终可靠地工作吗?
更新
在尝试通过检测数据流的isFinite
解决问题时,我错了。正如答案中提到的那样,它似乎不稳定/可靠。我将采用另一种方式重构我的解决方案。谢谢你的帮助~
generate
的标志;但这样做真正有什么价值呢?例如,对于Files.lines
,你的文件是否是“有限”的呢?我不知道为什么需要这样做。此外,Long.MAX_VALUE
除了用于表示无限流之外,在许多其他情况下也被使用。 - Eugene