如何在maxInt与minInt方法中复用findSeperator方法优化重复代码?
优化方案:消除重复逻辑并安全复用分隔符查找逻辑
核心问题分析
当前代码存在三个关键问题:
minInt未调用findSeperator,可能导致seperator成员变量未初始化,引发空指针或异常maxInt和minInt中的流处理逻辑(拆分、过滤、转int)完全重复findSeperator直接修改成员变量,引入状态依赖,不利于线程安全和方法独立性
最优实现方案
推荐采用纯函数式重构,去掉状态依赖,提取公共逻辑:
- 重构
findSeperator为返回分隔符枚举的方法,避免修改成员变量 - 提取公共的整数流生成逻辑,复用分隔符查找和流处理代码
- 简化
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
相关产品推荐
相关产品推荐

