gpt4 book ai didi

java - 命令模式如何被 lambda 表达式取代?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:20:38 24 4
gpt4 key购买 nike

这是对另一个问题 ( 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 表达式,如何缩短它?一般情况下会是什么样子? (抱歉我的英语不好)

最佳答案

这里是 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));

关于java - 命令模式如何被 lambda 表达式取代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18036760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com