For 循环 - 减少嵌套(n x m 操作)

For-loop - Reduce the Nesting (n x m operations)

我尝试使一些代码更具可读性(从而更易于维护)。让我们从代码的当前迭代开始:

int[] outerIterations = getDataToIterateOver();
for (int i : outerIterations) {
    for (int j : outerIterations) {
        if (i == j) continue;
        for (int a : getDataByIndex(i)) {
            for (int b : getDataByIndex(j)) {
                function1();
                function2();
            }
        }
    }
}

它有一些我已经可以减少的进一步嵌套,但我仍在寻找如何编写代码以减少嵌套。

我不是 Java 开发人员,而是从事 C# 和 Golang 开发,所以我认为我缺少一些可能对我有帮助的语言功能。

使用的Java版本:17

so I think I'm missing on some language feature

我猜这与 Java 的特定功能无关。

当您将大量操作添加到一个方法中时,很可能您在拨号时违反了 Single-responsibility principle

我知道你已经证明了一个简化的 code-sample。仔细看看你的方法在做什么,哪些动作可以从中提取出来。

这是一个关于如何减少嵌套级别的虚拟示例。

public void doSomething() {
    int[] outerIterations = getDataToIterateOver();
    for (int i : outerIterations) {
        for (int j : outerIterations) {
            if (i == j) continue;

            doSomethingWithIJ(i, j);
        }
    }
}

public void doSomethingWithIJ(int i, int j) {
    for (int a : getDataByIndex(i)) {
        for (int b : getDataByIndex(j)) {
            function1();
            function2();
        }
    }
}

以防万一,如果您假设可以使此代码在风格上具有功能性,即改用 Stream API,那么您需要提供接近实际代码的内容。目前,您似乎不能在这里应用函数式编程。