Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
拆分行并通过使用Java8流读取文件来处理它们_Java_Java 8 - Fatal编程技术网

拆分行并通过使用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
,因为这将为您提供单个条目流,并且您将无法正确处理它们。相反,您希望

  • 过滤谓词数据上生成的数组。等于(dictData[2])
  • 映射过滤后的数组,以便获得第一个元素
  • 对于每个元素,打印相应的消息

  • 您可以尝试以下方法:

    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资源。