如何在一个缓冲区中统一来自多个文件的数据?

时间:2016-12-24 14:56:57

标签: java readfile

我想用几个文件中的数据创建一个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]]

2 个答案:

答案 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这样的旧集合类型来构建它,但是它可以工作。