How could the command pattern be replaced by lambda expressions?
functional-programming, java, java-8, lambda
Solution
Here simple example with Java 8 lamdas. If you change a bit `Command` class so it will look like this:
@FunctionalInterface
interface Command {
void execute(int value);
}
Here it will accept value from sub array. Then you could write something like this:
int[][] array = ... // init array
Command c = value -> {
// do some stuff
};
Arrays.stream(array).forEach(i -> Arrays.stream(i).forEach(c::execute));
Problem
This is kind of a follow-up to another question (Reuse code for looping through multidimensional-array) where my specific problem was resolved by using the command-pattern. My problem was, that I had multiple methods performing operations on every element of a two-dimensional array - and therefore a lot of duplicate code. Instead of having many methods like so... ``` 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]; } } } ``` ... I solved it like this: ``` 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]; } }); } ``` Now if we had lambda expressions in Java, how could this be shortened? How would that look like in general? (Sorry for my poor English)