我对使用流还很陌生,我想尝试使用它们来解析配置文件。
我有这样的文件设置...
[Category 1]
1 2 3 4
5 6 7 8
[Category 2]
9 8 7 6
5 4 3 2
如何使用Streams从这些类别之一中获取所有行?是否有使用Streams的干净方法?
答案 0 :(得分:2)
您可以组合Java 9中引入的dropWhile
和takeWhile
方法。如果要搜索,请说[Category 2]
删除所有行,然后继续处理所有行,直到发现空行(或直到流将结束,但这种情况会自动覆盖)。
演示(有关split("\\R")
的更多信息,请参见https://stackoverflow.com/a/31060125):
String data =
"[Category 1]\n" +
"1 2 3 4\n" +
"5 6 7 8\n" +
"\n" +
"[Category 2]\n" +
"9 8 7 6\n" +
"5 4 3 2\n" +
"\n" +
"[Category 3]\n" +
"1 3 7 6\n" +
"4 4 3 2\n";
Stream.of(data.split("\\R")) // form Java 8 regex engine supports \R as line separator
.dropWhile(line->!line.equals("[Category 2]"))
.takeWhile(Predicate.not(String::isEmpty))
.forEach(System.out::println);
输出:
[Category 2]
9 8 7 6
5 4 3 2