java - 使用 Stream 读取文件并跟踪当前索引

标签 java android lambda java-8

我正在阅读这样一个大文件:

try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
    stream.skip(1).forEach(Main::parseLine);
} catch (IOException e) {
    e.printStackTrace();
}

解析行看起来像这样:

private static void parseLine(String line) {
    System.out.println(line);
}

我想做的也是跟踪我正在阅读的当前行,并让 parseLine 看起来像这样:

private static void parseLine(String line, int idx) {
    System.out.println(line);
}

我该怎么做?

最佳答案

将行收集到列表中,然后使用 IntStream.range 或显式 for 循环调用您的方法,将元素与索引一起传递:

List<String> result = stream.skip(1).collect(Collectors.toList());    
IntStream.range(0, result.size())
         .forEach(i -> parseLine(result.get(i), i));

另一种选择是使用 LineNumberReader API。

关于java - 使用 Stream 读取文件并跟踪当前索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50781945/

相关文章:

java - Spnego keytab 测试给出了 java 安全异常

java - Java中的字符串分割函数

java - 在单独的线程上进行网络操作和解析

C# lambda 函数含义和 C++ 翻译

c++ - Lambda 以迭代器为参数

c# - 如何构建具有特定签名的表达式?

java - 在 Javafx 中插入 Pane

java - 如何查找字符串中的一组单词?

java - ANDROID: If...Else 作为 Switch on String

android:TextView 的 LayoutParams 以编程方式使 View 消失