Java 获取行数,同时使用lambdas处理行
我试图获得一个lambda在BufferedReader中迭代行所处理的行数 有没有一种方法可以不写第二个lambda就得到行数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 -> {
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()。