Java中的有限生成流 - 如何创建一个?
在Java中,可以使用轻松生成无限流。但是,我需要生成一个最终将完成的流。Stream.generate(supplier)
例如,想象一下,我想要一个目录中所有文件的流。文件的数量可能很大,因此我无法预先收集所有数据并从中创建流(通过)。我需要逐个生成序列。但是流显然会在某个时候完成,并且像(或)这样的终端运营商需要处理它,所以不适合在这里。collection.stream()
collect()
findAny()
Stream.generate(supplier)
有没有一种合理的简单方法可以在Java中做到这一点,而无需我自己实现整个Stream接口?
我可以想到一个简单的技巧 - 用无限做,并提供null或抛出一个异常,当所有实际值都被取出。但它会破坏标准的流运算符,我只能与我自己的知道这种行为的运算符一起使用它。Stream.generate(supplier)
澄清
评论中的人建议作员。这不是我的意思。如何更好地表达问题...我不是在问如何过滤(或限制)现有流,我是在问如何动态地创建(生成)流,而无需预先加载所有元素,但流的大小有限(事先未知)。takeWhile()
溶液
我一直在寻找的代码是
Iterator it = myCustomIteratorThatGeneratesTheSequence();
StreamSupport.stream(Spliterators.spliteratorUnknownSize(it, Spliterator.DISTINCT), false);
我刚刚研究了,该方法是如何实现的。java.nio.file.Files
list(path)