Java 使用并行流读取文件行并提取索引

Java 使用并行流读取文件行并提取索引,java,java-stream,Java,Java Stream,我试图用并行流读取一个文件的内容,我需要知道每行的编号,这可能吗? 我见过其他与计算迭代流的索引相关的帖子,但它们不使用并行流 try (Stream<String> stream = Files.lines(myFile, myCharset).parallel()) { stream.forEach(line -> { // calculate index }); } catch (IOException e) { // hand

我试图用并行流读取一个文件的内容,我需要知道每行的编号,这可能吗? 我见过其他与计算迭代流的索引相关的帖子,但它们不使用并行流

try (Stream<String> stream = Files.lines(myFile, myCharset).parallel()) {
    stream.forEach(line -> { 
        // calculate index 
    });
} catch (IOException e) {
    // handle exception
}
try(Stream=Files.lines(myFile,myCharset.parallel()){
stream.forEach(第->{
//计算指标
});
}捕获(IOE异常){
//处理异常
}

谢谢。

不,不可能。并行流意味着所有流元素都是并行处理的。要获得索引,您需要一个顺序流


除此之外,该方法的行数未知,因此,除了索引问题外,并行处理这些行很可能不会获得任何性能。

您是只想并行读取行并仅显示它们,还是在并行流中处理它们?因为如果你想使用forEach并行处理它们,那么有一种方法可以做到,但这意味着一些并发代码。这些并发代码几乎与并行流的优点相冲突,不是吗?你将如何处理这些行号?我正在编写的程序分析一个大文件(2GB)的内容,并在数据库中记录包含错误的行号和验证结果。并行运行大约需要20分钟,否则最多需要1小时。然后,假设错误数量明显少于行数,您可以为该操作编写一个自定义的
收集器。关键的一点是,在并发处理期间,实际行号将不可用,但在组装最终错误列表时,实际行号将位于末尾。之后,它们可以被传输到数据库中。如果不可行,可以在数据库允许在后续更新中修复行号时,在处理过程中传输错误。