拆分行并通过使用Java8流读取文件来处理它们
我有一个巨大的文件,格式如下:- 第一行拆分行并通过使用Java8流读取文件来处理它们,java,java-8,Java,Java 8,我有一个巨大的文件,格式如下:- 第一行 第二行 第三行 第四行 第五行 数据1;数据2;数据3 数据1;数据2;数据3 数据1;数据2;数据3 .... .... 我希望我的代码跳过前5行,然后对于其余的行,它会将行拆分为“;”并与第三项进行字符串比较。我希望使用Java8流来实现这一目的,但无法找到正确的解决方法。我已经使用BufferedReader完成了我想做的事情,代码如下:- try (BufferedReader reader = Files.newBufferedReader
第二行
第三行
第四行
第五行
数据1;数据2;数据3
数据1;数据2;数据3
数据1;数据2;数据3
....
....
我希望我的代码跳过前5行,然后对于其余的行,它会将行拆分为“;”并与第三项进行字符串比较。我希望使用Java8流来实现这一目的,但无法找到正确的解决方法。我已经使用BufferedReader完成了我想做的事情,代码如下:-
try (BufferedReader reader = Files.newBufferedReader(dictionaryPath)) {
String line;
reader.readLine();
reader.readLine();
reader.readLine();
reader.readLine();
reader.readLine();
while ((line = reader.readLine()) != null) {
String[] dictData = line.split(";");
if (data.equals(dictData[2])) {
System.out.println("Your Data Item is: " + dictData[0]);
break;
}
}
}
但我不确定如何使用Java8流实现上述功能。我试着做如下的事情:
try (Stream<String> lines = Files.lines(dictionaryPath)) {
lines.skip(5).map(line -> line.split(";")).flatMap(Arrays::stream)
try(streamlines=Files.lines(dictionaryPath)){
line.skip(5).map(line->line.split(;)).flatMap(数组::流)
但无法理解更多内容。我希望获得一些帮助。您不想调用
flatMap
,因为这将为您提供单个条目流,并且您将无法正确处理它们。相反,您希望
您可以尝试以下方法:
Files.lines(dictionaryPath)
.skip(5) // skip first five lines
.map(line -> line.split(";")) // split by ';'
.filter(dictData -> data.equals(dictData[2])) // filter by second element
.findFirst() // get first that matches and, if present, print it
.ifPresent(dictData -> System.out.println("Your Data Item is: " + dictData[0]));
附录:不是100%确定,但我认为流在操作后会自动关闭,因此可能不需要try with资源。