如果你经常需要操作多维数组或者对其进行遍历,那你是不是已经经常陷入了无限多个For循环的痛苦中? 如果是这样,那不如抽几分钟的时间来看看这边文章。 我相信,看完这篇文章,你会发现使用Lambdas 来简化多维数组的操作是多么的优雅与方便。
首先,我们来看看通常如果我们需要遍历一个多维数组,应该使用什么姿势:
float[][] values = ...
for (int i = 0; i < values.length; i++) {
for (int k = 0; k < values[i].length; k++) {
float value = values[i][k];
// do something with i, k and value
}
}
当然啦,你也可以使用 for-each 来简化你的代码。然而通常在循环中你需要 索引index 来进行一些计算,这个时候如果你使用 for-each 是不是傻眼了,我的index呢?在这种情况下 也是有姿势的:
private void loop(float[][] values, BiConsumer<Integer, Integer> consumer) {
for (int i = 0; i < values.length; i++) {
for (int k = 0; k < values[i].length; k++) {
consumer.accept(i, k);
}
}
}
然后呢,我们可以遍历数组的index:
float[][] values = ...
loop(values, (i, k) -> {
float value = values[i][k];
// do something with i, k and value
});
这样做的好处就是你可以让你的循环代码跟你的业务逻辑分离开,当然了 你也可以改变loop的逻辑以满足你的业务需求。