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

如何提取仅下标存在差异的重复Java代码块为函数?

用函数式接口提取重复Java代码的实现方案

1. 定义函数式接口

先创建一个函数式接口,封装根据i、j坐标获取棋盘对应位置数值的逻辑——这正是两段代码的核心差异点:

@FunctionalInterface
interface BoardValueProvider {
    int get(int i, int j);
}

2. 抽取通用逻辑方法

把两段代码里重复的循环逻辑抽成公共方法,参数传入上面的函数式接口,让它负责提供不同坐标下的数值:

private void checkValues(Board board, BoardValueProvider valueProvider) {
    for (int i = 0; i < Board.COLUMN_SIZE; i++) {
        boolean[] present = initializeBooleanArray();
        for (int j = 0; j < Board.COLUMN_SIZE; j++) {
            // 通过函数式接口统一获取数值,消除重复逻辑
            int value = valueProvider.get(i, j);
            present[value - 1] = true;
        }
        // 可在此添加后续逻辑,比如校验present数组的有效性等
    }
}

3. 调用通用方法

用Lambda表达式分别实现两种坐标逻辑,调用公共方法即可:

  • 对应第一段代码(行优先,[i][j]):
checkValues(board, (i, j) -> board.getArray()[i][j]);
  • 对应第二段代码(列优先,[j][i]):
checkValues(board, (i, j) -> board.getArray()[j][i]);

补充说明

  • @FunctionalInterface注解可选,但加上能明确这是为Lambda设计的接口,避免后续误加方法破坏函数式特性。
  • 如果后续新增其他遍历逻辑(比如对角线),只需新增对应的Lambda表达式调用公共方法,无需重复编写循环代码。

内容的提问来源于stack exchange,提问作者marcin-dolowy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 00:18:22