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

如何简化或合并查找数组中最小与最大整数的两个方法?

简化相似方法的通用思路:以查找数组最值为例

你的两个方法核心逻辑高度重复,唯一差异就是判断是否更新最值的比较条件。解决这类「逻辑框架一致、仅判断规则不同」的问题,核心思路是提取公共逻辑,将变化的规则抽象为可传递的参数,以下是具体实现方案:

方案1:自定义抽象逻辑,手动复用公共代码

先定义一个函数式接口封装「是否需要更新当前最值」的判断逻辑,再把遍历数组的公共逻辑抽成单独方法:

// 用函数式接口封装判断规则
@FunctionalInterface
private interface UpdateRule {
    boolean shouldReplaceCurrent(int currentExtreme, int candidate);
}

// 公共的最值查找方法,接收判断规则作为参数
private int findExtreme(UpdateRule rule) {
    int extreme = arr[0];
    for (int num : arr) {
        if (rule.shouldReplaceCurrent(extreme, num)) {
            extreme = num;
        }
    }
    return extreme;
}

// 原方法简化为调用公共方法+传递对应规则
private int findMin() {
    return findExtreme((current, candidate) -> candidate < current);
}

private int findMax() {
    return findExtreme((current, candidate) -> candidate > current);
}

这种方式完全保留原有遍历逻辑,仅抽离差异部分,既避免代码重复,又保持逻辑清晰。

方案2:利用Java 8+流API(库已封装好抽象)

如果项目使用Java 8及以上版本,流API已封装好「遍历+找最值」的公共逻辑,直接调用即可:

import java.util.Arrays;

private int findMin() {
    return Arrays.stream(arr).min().orElse(arr[0]);
}

private int findMax() {
    return Arrays.stream(arr).max().orElse(arr[0]);
}

本质上,流的min()/max()方法也是基于「抽象比较规则」的思路,底层帮我们处理了遍历和判断逻辑。

通用解决思路总结

遇到功能相似的方法时,按以下步骤处理:

  1. 拆分代码:把方法逻辑拆成「不变的框架部分」和「变化的规则部分」。比如你的例子中,遍历数组、初始化最值、更新最值的流程是不变的,比较条件是变化的。
  2. 抽象变化部分:用接口(或函数式接口)把变化的规则封装成可传递的参数。
  3. 复用公共逻辑:把不变的框架抽成单独方法,通过传入不同的规则参数实现不同功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:10:17