首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用lambda过滤Reader

使用lambda过滤Reader
EN

Stack Overflow用户
提问于 2021-11-25 11:55:58
回答 1查看 41关注 0票数 0

我正在从压缩的输入流中读取行,并且我需要根据前4个位置(一个句点)对其进行过滤。是否可以使用lambda (就像streams中的过滤器)来避免这种情况?

代码语言:javascript
复制
private List<String> readlinesByPeriod(DPeriod period, ZipInputStream zis) throws IOException {
    List<String> lines = new ArrayList();

    byte[] data = SCIOUtils.readData(zis);
    InputStream is = new ByteArrayInputStream(data);
    BufferedReader reader = new BufferedReader(new InputStreamReader(is, CharEncoding.ISO_8859_1));
    String line;
    while ((line = reader.readLine()) != null) {
        String periodCode = StringUtils.substring(line, 0, 4);
        if (periodCode.equals(period.getCode())) {
            lines.add(line);
        }
    }

    return lines;
}
EN

回答 1

Stack Overflow用户

发布于 2021-11-25 12:05:27

是的,这是可能的

代码语言:javascript
复制
return reader.lines()
    .filter(line -> StringUtils.substring(line, 0, 4).equals(period.getCode()))
    .collect(Collectors.toList());

值得注意的是,the JavaDoc for BufferedReader.lines

如果在访问基础BufferedReader时引发IOException,则将其包装在UncheckedIOException中,该an将从导致发生读取的流方法中引发

因此,如果您希望您的方法继续抛出已检查的异常(IOException或其他),则必须将上述内容包装在UncheckedIOException的try-catch块中,并将其包装并作为已检查的异常重新抛出。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70110700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档