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,那么您需要提供接近实际代码的内容。目前,您似乎不能在这里应用函数式编程。
我尝试使一些代码更具可读性(从而更易于维护)。让我们从代码的当前迭代开始:
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,那么您需要提供接近实际代码的内容。目前,您似乎不能在这里应用函数式编程。