Java 8地图<;字符串,可运行>;控制流
我试图让自己熟悉一些新的Java8功能(ha),但我遇到了一些控制流问题 在下面的代码中,我有一个Java 8地图<;字符串,可运行>;控制流,java,java-8,runnable,Java,Java 8,Runnable,我试图让自己熟悉一些新的Java8功能(ha),但我遇到了一些控制流问题 在下面的代码中,我有一个映射,因此我可以根据方法的名称调用它们,但我似乎不知道如何做两件事: 如何使这些方法采用参数?也就是说,我需要在映射“put”s中使用什么语法 当我从“Dispatch”中的“get”方法调用这些方法时,我无法返回该方法的返回值(Status)。我怀疑这与调用该方法的位置有关,但我无法确定。Status只是一个枚举,而toList方法只取一个空格分隔的字符串并返回一个列表(这意味着用作REPL)
映射
,因此我可以根据方法的名称调用它们,但我似乎不知道如何做两件事:
import java.util.*;
公共类调度器{
私有地图功能;
私人身份;
私有列表命令;
可选选项;
公共调度程序(){
func=新的HashMap();
func.put(“Method1”,this::Method1);
func.put(“Method2”,this::Method2);
func.put(“Help”,this::Help);
status=status.DONE;
}
私人身份帮助(){
返回状态。完成;
}
私有状态方法1(){
返回状态。完成;
}
私有状态方法2(){
返回状态。完成;
}
/**
*在新进程上执行给定的命令。
*@param command调用方请求的完整命令,包括命令名和参数。
*@返回请求操作的状态。
*/
公共状态分派(字符串命令){
opt=commandexplorer.toList(命令);
opt.orElse(newlinkedlist(){{add(“Help”);}});
函数get(opt.get().get(0));
返回状态。完成;
}
}
如果希望方法获取参数,则不希望将其存储为Runnable
。您可能需要Consumer
,或另一个接受参数的自定义函数接口——如果需要返回值,请使用函数
,或创建自己的接口。Runnable
接口不支持“不接受任何参数或返回类型。若要添加返回类型,您可以使用供应商
。若要添加参数,请使用函数
以下是一个框架,您可以开始如何处理接受零个或多个参数并返回状态代码的命令。这只是一个蓝图,一个示例。它可能有助于您入门:
public class Dispatcher {
public static final int SUCCESS = 0;
public static final int FAILURE = 1;
public static final Command HELP = (args) -> {
String command = args[0];
System.out.println("Usage of " + command + ": bla bla");
return FAILURE;
};
public static final Command RENAME = (args) -> {
File oldName = new File(args[1]);
File newName = new File(args[2]);
return oldName.renameTo(newName) ? SUCCESS : FAILURE;
};
public final Map<String, Command> commands = new HashMap<String, Command>() {{
put("help", HELP);
put("rename", RENAME);
}};
public int dispatch(String commandLine) {
String[] args = commandLine.split("\\s");
return Optional.ofNullable(commands.get(args[0]))
.orElse(HELP)
.execute(args);
}
}
interface Command {
int execute(String... args);
}
公共类调度程序{
公共静态最终整数成功=0;
公共静态最终int故障=1;
公共静态最终命令帮助=(args)->{
String命令=args[0];
System.out.println(“使用“+命令+”:bla bla”);
返回失败;
};
公共静态最终命令重命名=(args)->{
文件oldName=新文件(args[1]);
File newName=新文件(args[2]);
返回oldName.renameTo(newName)?成功:失败;
};
公共最终映射命令=newhashmap(){{
放置(“帮助”,帮助);
放置(“重命名”,重命名);
}};
公共整数分派(字符串命令行){
字符串[]args=commandLine.split(“\\s”);
返回可选的.ofNullable(commands.get(args[0]))
.orElse(帮助)
.执行(args);
}
}
接口命令{
int执行(字符串…参数);
}
public class Dispatcher {
public static final int SUCCESS = 0;
public static final int FAILURE = 1;
public static final Command HELP = (args) -> {
String command = args[0];
System.out.println("Usage of " + command + ": bla bla");
return FAILURE;
};
public static final Command RENAME = (args) -> {
File oldName = new File(args[1]);
File newName = new File(args[2]);
return oldName.renameTo(newName) ? SUCCESS : FAILURE;
};
public final Map<String, Command> commands = new HashMap<String, Command>() {{
put("help", HELP);
put("rename", RENAME);
}};
public int dispatch(String commandLine) {
String[] args = commandLine.split("\\s");
return Optional.ofNullable(commands.get(args[0]))
.orElse(HELP)
.execute(args);
}
}
interface Command {
int execute(String... args);
}