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

如何在maxInt与minInt方法中复用findSeperator方法优化重复代码?

优化方案:消除重复逻辑并安全复用分隔符查找逻辑

核心问题分析

当前代码存在三个关键问题:

  • minInt 未调用 findSeperator,可能导致 seperator 成员变量未初始化,引发空指针或异常
  • maxInt 和 minInt 中的流处理逻辑(拆分、过滤、转int)完全重复
  • findSeperator 直接修改成员变量,引入状态依赖,不利于线程安全和方法独立性

最优实现方案

推荐采用纯函数式重构,去掉状态依赖,提取公共逻辑:

  1. 重构 findSeperator 为返回分隔符枚举的方法,避免修改成员变量
  2. 提取公共的整数流生成逻辑,复用分隔符查找和流处理代码
  3. 简化 maxInt 和 minInt,直接调用公共方法获取极值
// 重构为纯函数,返回找到的分隔符枚举
private SeperatorEnum findSeperator(String data) {
    Optional<String> optional = Arrays.stream(data.split(""))
            .filter(e -> !numberPattern.matcher(e).matches())
            .findFirst();
    return Arrays.stream(SeperatorEnum.values())
            .filter(e -> e.getSeperator().equals(optional.orElse(null)))
            .findFirst()
            .orElseThrow();
}

// 提取公共逻辑:生成处理后的IntStream
private IntStream getParsedIntStream(String data) {
    SeperatorEnum separator = findSeperator(data);
    // 注意:如果分隔符是正则特殊字符(如.、*),需用Pattern.quote转义避免正则匹配问题
    String splitRegex = Pattern.quote(separator.getSeperator());
    return Arrays.stream(data.split(splitRegex))
            .filter(e -> numberPattern.matcher(e).matches())
            .mapToInt(Integer::parseInt);
}

// 简化maxInt,直接复用公共逻辑
public OptionalInt maxInt(String data) {
    return getParsedIntStream(data).max();
}

// 简化minInt,确保每次调用都正确获取分隔符
public OptionalInt minInt(String data) {
    return getParsedIntStream(data).min();
}

方案优势

  • 消除重复代码:分隔符查找、流处理逻辑完全复用,后续新增类似方法(如sumInt)只需一行代码
  • 无状态依赖:去掉了成员变量 seperator,每个方法调用独立,避免多线程环境下的状态混乱
  • 逻辑清晰:每个方法职责单一,findSeperator 专注找分隔符,getParsedIntStream 专注数据转换,maxInt/minInt 专注计算极值
  • 鲁棒性提升:minInt 现在会自动查找分隔符,避免未初始化的异常风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:35:34