我想用几个文件中的数据创建一个Stream。我怎么能这样做?有我的java类。或者也许我应该使用不是BufferReader而是其他方式?谢谢!!
>>> my_list = [[1], [2, [3, 12, [4, 11, 12]]], [5, 6, 13, 14], [15]]
>>>
>>> def filter_function(e):
... if isinstance(e, list):
... return filter(None, map(filter_function, e))
... elif e > 10:
... return e
...
>>>
>>> print(list(filter_function(my_list)))
[[[12, [11, 12]]], [13, 14], [15]]
答案 0 :(得分:1)
您可以为Stream
为每个文件创建一个BufferedReader
,将它们合并为一个流,然后使用Stream#flatMap
方法创建一个流,这是所有这些的串联
import java.util.function.Function;
import java.util.stream.Stream;
public class CombinedStreams
{
public static void main(String[] args)
{
Stream<String> stream0 = Stream.of("line0", "line1");
Stream<String> stream1 = Stream.of("line2", "line3");
Stream<String> stream2 = Stream.of("line4", "line5");
Stream<String> stream = Stream.of(stream0, stream1, stream2)
.flatMap(Function.identity());
stream.forEach(e -> System.out.println(e));
}
}
(对于建议的改进,感谢dieieben07!)
答案 1 :(得分:1)
如果您不需要BufferedReader
并且Stream解决方案就足够了,请使用它。
如果您绝对需要阅读器,可以使用SequenceInputStream
连接InputStream
,然后从中创建BufferedReader
。
由于SequenceInputStream
需要Enumeration
,所以API有点笨拙,所以你必须使用像Vector这样的旧集合类型来构建它,但是它可以工作。