Java 获取行数,同时使用lambdas处理行

Java 获取行数,同时使用lambdas处理行,java,bufferedreader,java-11,Java,Bufferedreader,Java 11,我试图获得一个lambda在BufferedReader中迭代行所处理的行数 有没有一种方法可以不写第二个lambda就得到行数 final BufferedReader inReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); inReader.lines().forEach(line -> {

我试图获得一个lambda在BufferedReader中迭代行所处理的行数

有没有一种方法可以不写第二个lambda就得到行数

        final BufferedReader inReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));

        inReader.lines().forEach(line -> {
            
            // do something with the line
         });

我能在上面的代码块中也得到一个计数吗?我使用的是Java 11。

如果我理解正确,您希望将lamba计算在内。当然,你能做到。在执行
forEach
之前,只需初始化
count
变量,并增加lambda块中的
count
。像这样:

final BufferedReader inReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));

// fixed the long by this
final AtomicLong counter = new AtomicLong();
inReader.lines().forEach(line -> {
  counter.incrementAndGet();
  // do something with the line
});
// here you can do something with the count variable, like printing it out
System.out.printf("count=%d%n", counter.get());
forEach
方法来自
Iterable
。这显然不是我处理读者的方式。我会这样做:

try (BufferedReader inReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"))) {
  Stream<String> lines = inReader.lines();
  
  long i = lines.peek(line -> {
        
        // do something with the line
     }).count();
  
  System.out.printf("count=%d%n", i);
try(BufferedReader inReader=新的BufferedReader(新的InputStreamReader(inputStream,“UTF-8”)){
流线=导入器中的线();
长i=行。窥视(行->{
//用绳子做点什么
}).count();
System.out.printf(“计数=%d%n”,i);
}

PS:并没有真正测试这个,所以如果我犯了错误,请纠正我。

试试这个:

AtomicLong count = new AtomicLong();
lines.stream().forEach(line -> {
    count.getAndIncrement();
    // do something with line;
});

对的流有两种类型的函数:终端和非终端。非终端操作返回一个流,终端返回其他内容。forEach是终端,不能在结果中调用count,因为它不是流。另一方面,peek是一个非终端操作,它的作用是相同的——将使用者应用于流——但返回作为输入接收的相同蒸汽,因此现在可以对结果调用count()。