提高(行)(列)迭代效率 - Java
Improve (Row)(Col) Iteration Efficiency - Java
我目前正在为我正在处理的应用程序写一篇很长的文章 class。
有两行代码不断重复,但我想不出更快的方法!
行是:
for (int row = 0; row < 8; row++)
for (int col = 0; col < 8; col++)
// Do Something
对于这样一个简单的"double loop"迭代,一定有一些方法可以减少这两行出现的次数,或者使代码更简单。
谁能减少这个的字符数?
编辑:
欲了解更多信息,
因为代码经常重复,我想减少字符数或使用两个 for 循环的替代方法。
代码使用如下(举例):
for (int row = 0; row < 8; row++)
for (int col = 0; col < 8; col++)
setVal();
for (int row = 0; row < 8; row++)
for (int col = 0; col < 8; col++)
getVal();
嗯,有这个公式。
for (int i = 0; i < 64; i++) {
int row = i / 8;
int col = i % 8;
// do something
}
虽然我不认为那是你要找的。
我不知道嵌套循环有什么问题,但是您可以在 java 8 中使用 lambda 将其缩短一点。
编写表示嵌套循环的通用方法。
private static void loops(BiConsumer<Integer, Integer> biConsumer) {
for (int row = 0; row < 8; row++)
for (int col = 0; col < 8; col++)
biConsumer.accept(row, col);
}
然后你可以这样称呼它:
loops((row, col) -> System.out.println("The cell is (" + row + ", " + col + ")"));
一般可以这样写:
loops((row, col) -> {
// Put your code in here.
});
假设您希望 setVal() 和 getVal() 了解行和列,您可以执行如下操作:
void matrixExecute(MatrixExecutor executor) {
for (int row = 0; row < 8; row++) {
for (int col = 0; col < 8; col++) {
executor.execute(col, row);
}
}
}
private interface MatrixExecutor {
void execute(int col, int row);
}
要内联使用此工具:
matrixExecute(new MatrixExecutor() {
@Override
public void execute(int col, int row) {
System.out.println("col:" + col + "row:" + row);
}
});
虽然这仍然很冗长,但是当您转到 Java 8 和 lamda 表达式时,它非常好:
matrixExecute((col,row) -> { System.out.println("col:"+col+"row:"+row);});
请注意,需要确保您了解闭包。
我目前正在为我正在处理的应用程序写一篇很长的文章 class。 有两行代码不断重复,但我想不出更快的方法!
行是:
for (int row = 0; row < 8; row++)
for (int col = 0; col < 8; col++)
// Do Something
对于这样一个简单的"double loop"迭代,一定有一些方法可以减少这两行出现的次数,或者使代码更简单。
谁能减少这个的字符数?
编辑:
欲了解更多信息,
因为代码经常重复,我想减少字符数或使用两个 for 循环的替代方法。
代码使用如下(举例):
for (int row = 0; row < 8; row++)
for (int col = 0; col < 8; col++)
setVal();
for (int row = 0; row < 8; row++)
for (int col = 0; col < 8; col++)
getVal();
嗯,有这个公式。
for (int i = 0; i < 64; i++) {
int row = i / 8;
int col = i % 8;
// do something
}
虽然我不认为那是你要找的。
我不知道嵌套循环有什么问题,但是您可以在 java 8 中使用 lambda 将其缩短一点。
编写表示嵌套循环的通用方法。
private static void loops(BiConsumer<Integer, Integer> biConsumer) {
for (int row = 0; row < 8; row++)
for (int col = 0; col < 8; col++)
biConsumer.accept(row, col);
}
然后你可以这样称呼它:
loops((row, col) -> System.out.println("The cell is (" + row + ", " + col + ")"));
一般可以这样写:
loops((row, col) -> {
// Put your code in here.
});
假设您希望 setVal() 和 getVal() 了解行和列,您可以执行如下操作:
void matrixExecute(MatrixExecutor executor) {
for (int row = 0; row < 8; row++) {
for (int col = 0; col < 8; col++) {
executor.execute(col, row);
}
}
}
private interface MatrixExecutor {
void execute(int col, int row);
}
要内联使用此工具:
matrixExecute(new MatrixExecutor() {
@Override
public void execute(int col, int row) {
System.out.println("col:" + col + "row:" + row);
}
});
虽然这仍然很冗长,但是当您转到 Java 8 和 lamda 表达式时,它非常好:
matrixExecute((col,row) -> { System.out.println("col:"+col+"row:"+row);});
请注意,需要确保您了解闭包。