You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用lambda过滤BufferedReader读取的压缩流行数据以省略条件判断是否可行

问题解答

完全可以使用Stream流的filter Lambda表达式替换显式的条件判断,改写后的代码如下:

private List<String> readlinesByPeriod(DPeriod period, ZipInputStream zis) throws IOException {
    byte[] data = SCIOUtils.readData(zis);
    // 用try-with-resources自动关闭流,避免资源泄漏
    try (InputStream is = new ByteArrayInputStream(data);
         BufferedReader reader = new BufferedReader(new InputStreamReader(is, CharEncoding.ISO_8859_1))) {
        return reader.lines()
                .filter(line -> period.getCode().equals(StringUtils.substring(line, 0, 4)))
                .toList();
        // Java 8版本不支持Stream.toList()的话,替换为.collect(Collectors.toList())即可
    }
}
  • 链式调用逻辑完全对齐原有业务规则:逐行读取→按前4位周期编码过滤→收集符合条件的行返回,无冗余中间变量
  • 省略了手动声明集合、while循环、if条件判断的样板代码,可读性更强
  • 新增的自动关流逻辑修复了原有代码潜在的资源泄漏问题

补充:如果存在行长度不足4位的场景,可以在filter中增加长度校验逻辑,避免字符串截取异常,调整后的filter逻辑如下:
filter(line -> line.length() >= 4 && period.getCode().equals(StringUtils.substring(line, 0, 4)))

内容的提问来源于stack exchange,提问作者Lluis Martinez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:27:03