gpt4 book ai didi

java - 尝试在 Java 中使用 lambda 进行小规模重构

转载 作者:行者123 更新时间:2023-12-02 07:50:30 24 4
gpt4 key购买 nike

我正在开发一个程序的一部分(关于语音识别和遥控汽车),其中代码 transmit(XXXXX); disableAutoMode();重复多次。出于好奇,我想将其转换为类似于此的 lambda 函数 var f = p -> transmit(p); disableAutoMode(); (原谅 var ;我不知道表达式的类型是什么),然后以类似于这样的方式调用它: f("s"); , f("a");f("f");或类似于f.call("s");的东西, f.call("a");f.call("f"); .

在 Java 中使用类似于我上面描述的简单 lambda 函数的正确语法是什么? (我应该写下什么,因为它的类型而不是说 var ?)

如果您好奇的话,这是代码块:

@Override
public void onResult(Hypothesis hypothesis) {
if (hypothesis != null) {
String text = hypothesis.getHypstr();
Log.i("onresult",text);
ToastMaster(text);

switch (text) {
case "forward":
case "go forward":
transmit("f");
disableAutoMode();
break;
case "go back":
case "go backward":
case "back":
case "backward":
case "reverse":
transmit("b");
disableAutoMode();
break;
case "skid left":
case "go left":
transmit("l");
disableAutoMode();
break;
case "skid right":
case "go right":
transmit("r");
disableAutoMode();
break;
case "turn left":
transmit("q");
disableAutoMode();
break;
case "turn right":
transmit("e");
disableAutoMode();
break;
case "reverse left":
transmit("z");
disableAutoMode();
break;
case "reverse right":
transmit("x");
disableAutoMode();
break;
case "stop":
disableAutoMode();
break;
case "automatic":
toggleAutoMode(null);
break;
case "enable automatic mode":
enableAutoMode();
break;
case "disable automatic mode":
disableAutoMode();
break;
}
}
}

最佳答案

更雄心勃勃的重构将建立在 lambda 所涉及的“将代码转换为数据”原则的基础上,将 switch 语句从代码转换为数据。怎么样:

// One-time setup of the machine
Map<String, Consumer<String>> actions = new HashMap<>();
actions.put("go forward", x -> { transmit(x); disableAutoMode(); });
actions.put(...)
...

public void onResult(Hypothesis hypothesis) {
if (hypothesis != null) {
String text = hypothesis.getHypstr();
Log.i("onresult",text);
ToastMaster(text);

Consumer<String> action = actions.get(text);
if (action != null)
action.accept(text);
}
}

关于java - 尝试在 Java 中使用 lambda 进行小规模重构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35593146/

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