我如何使用lambda表达式将列表中仅包含拉丁字母或数字的所有行输出到给定的编写器,并在第一个异常之前返回成功写入的字节数?
我的代码:
public int writeAllCountingBytesTransferred(Writer writer, List<String> list) {
return list.stream().filter(x -> x.matches("^[a-zA-Z0-9]+$") ).forEach(x-> {
try {
writer.write(x);
how do I count bytes?
} catch (IOException e) {
how do I return bytes?
}
});
}
您可以像这样使用AtomicInteger
:
public int writeAllCountingBytesTransferred(Writer writer, List<String> list) {
AtomicInteger count = new AtomicInteger(0);
list.stream()
.filter(x -> x.matches("^[a-zA-Z0-9]+$"))
.forEach(x -> {
try {
writer.write(x);
count.addAndGet(x.getBytes().length);
} catch (IOException e) {
e.printStackTrace();
}
});
return count.get();
}