如何将所有行输出到给定的编写器并返回字节数

问题描述 投票:0回答:1

我如何使用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?

        }
    });        
}
java stream
1个回答
0
投票

您可以像这样使用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();
}
© www.soinside.com 2019 - 2024. All rights reserved.