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

如何用函数式接口传递比较运算符优化while循环实现方法去重?

代码去重方案:利用函数式接口复用遍历逻辑

当然可以通过函数式接口实现代码去重,核心是把两个方法中唯一差异的循环终止条件抽象成可传入的逻辑,将重复的遍历主体、变量初始化等代码抽成公共方法。

具体改造步骤

  1. 提取公共遍历方法
    新增一个包含所有重复逻辑的私有方法,额外传入一个Predicate<Integer>类型的参数,用来定义循环的终止条件:

    private void traverse(int number, int index, int increment, int to, Predicate<Integer> loopCondition) {
        int localMax = 0;
        int i = index;
        while (loopCondition.test(i)) {
            i += increment;
            // 这里放置原来的common body代码
        }
    }
    
  2. 简化原方法
    原来的goLeft和goRight只需调用公共方法,用Lambda表达式传入对应的循环条件即可:

    void goLeft(int number, int index, int increment, int to) {
        traverse(number, index, increment, to, i -> i > to);
    }
    
    void goRight(int number, int index, int increment, int to) {
        traverse(number, index, increment, to, i -> i < to);
    }
    

逻辑说明

  • Predicate<Integer>是Java自带的函数式接口,专门用来描述"判断一个输入是否满足条件"的逻辑,完美适配这里的循环终止判断需求。
  • 通过Lambda表达式i -> i > to和i -> i < to,我们把两个方法的差异逻辑单独传入公共方法,既保留了原有功能,又完全消除了代码重复。

如果后续common body需要根据方向做细微调整,还可以进一步引入其他函数式接口(比如Function)传入差异化逻辑,但当前场景下用Predicate就足够解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:02:55