【发布时间】:2015-01-10 21:33:09
【问题描述】:
我正在尝试使用 Java 8 Lambda 表达式和流来解析一些日志。我有一个运行后运行的巨大日志文件。我想将它分成单独的集合,每次运行一个。我不知道日志有多少次运行。为了锻炼我非常薄弱的 lambda 表达式肌肉,我想一次性完成。
这是我当前的实现:
List<String> lines = readLines(fileDirectory);
Pattern runStartPattern = Pattern.compile("INFO: \\d\\d:\\d\\d:\\d\\d: Starting");
LinkedList<List<String>> testRuns = new LinkedList<>();
List<String> currentTestRun = new LinkedList<>(); // In case log starts in middle of run
testRuns.add(currentTestRun);
for(String line:lines){
if(runStartPattern.matcher(line).find()){
currentTestRun = new ArrayList<>();
testRuns.add(currentTestRun);
}
currentTestRun.add(line);
}
if(testRuns.getFirst().size()==0){ // In case log starts at a run
testRuns.removeFirst();
}
基本上类似于 TomekRekawek 的解决方案 here,但开始时分区大小未知。
【问题讨论】:
-
您遇到了什么问题?你已经描述了你想做什么,而不是你尝试做的困难。
-
我没有看到用流做同样事情的方法。我不知道如何在流中将下一个元素标记为需要创建新的
List<String>
标签: java lambda java-8 java-stream