改进(行)(Col)迭代效率 - Java

时间:2015-01-07 20:29:07

标签: java loops for-loop

我正在为我正在处理的应用程序编写一个长类。 有两行代码不断重复,但我想不出更快的方法!

这些行是:

for (int row = 0; row < 8; row++)
    for (int col = 0; col < 8; col++)
        // Do Something

对于这样一个简单的&#34;双循环&#34;迭代,必须有一些方法可以减少这两行出现的次数,或者使代码更简单。

任何人都可以减少这个字符数吗?

编辑:

欲了解更多信息,

因为代码经常重复,我要么减少字符数,要么使用两个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(); 

3 个答案:

答案 0 :(得分:1)

我不知道嵌套循环有什么问题,但你可以使用lambdas在java 8中缩短它。

编写表示嵌套循环的通用方法。

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.
});

答案 1 :(得分:1)

假设您希望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);});

请注意,需要确保了解闭包。

答案 2 :(得分:0)

嗯,有这个表述。

    for (int i = 0; i < 64; i++) {
        int row = i / 8;
        int col = i % 8;
        // do something
    }

虽然我认为这不是你想要的。