Java 8 Stream过滤器用于过滤文件的特定部分

时间:2017-10-10 05:32:53

标签: java filter java-stream

我有一个包含太多信息的文件。像,

AA BB CC DD 
WW FF SS FF
..
..
..

然后,

**** Input data ***
**
*
142.12123  Input taken for metrics
123.1222   Calculation point
.
.
.
**** Another Input ****

有没有办法只从

中挑选
  

输入数据

直到

  

“另一个输入”

我尝试将文件读作Stream并过滤,

Stream<String> output = Files
                .lines(Paths.get("a.out"))
Map<Boolean, List<String>> partition = output
                .collect(Collectors.partitioningBy(s -> s.contains("Input data")));

但过滤器似乎只过滤了一行。我们可以过滤多行还是设置为结束?

1 个答案:

答案 0 :(得分:1)

有一个java 9流api (0, 0) / (1,0) / (2, 0) / \ (2, 1) (2, 2) / / (T,F)/ (1,2) (1, 1) / (0,2) / (0,1) This return(T,F) when it should return (T,T). Because (0,1) won't call (0,0) since it is already being processed(i.e visited) which in turn depends on (0,1), creating a cycle. Although there exists a path from (0,0) to atlantic takeWhile,它将谓词作为参数。

dropWhile

您可以使用 java 8 并过滤:

来获得simillar结果

请记住,它只能在有序流中运行,并且parallerism会破坏此代码。

请注意,我目前没有IDE,所以我不确定这个会编译,但是当你修复错误时它应该可以工作。

takeWhile(s->s.contains("Another input"))
.dropWhile(s->s.contains("Input data"))