这是对另一个问题(Reuse code for looping through multidimensional-array)的后续行动,其中我使用命令模式解决了我的具体问题。我的问题是,我有多个方法对二维数组的每个元素执行操作 - 因此有很多重复的代码。而不是像这样的许多方法......
void method() {
for (int i = 0; i < foo.length; i++) {
for (int j = 0; j < foo[i].length; j++) {
// perform specific actions on foo[i][j];
}
}
}
......我这样解决了:
interface Command {
void execute(int i, int j);
}
void forEach(Command c) {
for (int i = 0; i < foo.length; i++) {
for (int j = 0; j < foo[i].length; j++) {
c.execute(i, j);
}
}
}
void method() {
forEach(new Command() {
public void execute(int i, int j) {
// perform specific actions on foo[i][j];
}
});
}
现在,如果我们在Java中使用lambda表达式,那么如何缩短它?这看起来一般怎么样? (抱歉我的英语不好)
答案 0 :(得分:8)
这里有Java 8 lamdas的简单示例。如果您更改了一个Command
类,那么它将如下所示:
@FunctionalInterface
interface Command {
void execute(int value);
}
这里它将接受来自子数组的值。然后你可以这样写:
int[][] array = ... // init array
Command c = value -> {
// do some stuff
};
Arrays.stream(array).forEach(i -> Arrays.stream(i).forEach(c::execute));