Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8地图<;字符串,可运行>;控制流_Java_Java 8_Runnable - Fatal编程技术网

Java 8地图<;字符串,可运行>;控制流

Java 8地图<;字符串,可运行>;控制流,java,java-8,runnable,Java,Java 8,Runnable,我试图让自己熟悉一些新的Java8功能(ha),但我遇到了一些控制流问题 在下面的代码中,我有一个映射,因此我可以根据方法的名称调用它们,但我似乎不知道如何做两件事: 如何使这些方法采用参数?也就是说,我需要在映射“put”s中使用什么语法 当我从“Dispatch”中的“get”方法调用这些方法时,我无法返回该方法的返回值(Status)。我怀疑这与调用该方法的位置有关,但我无法确定。Status只是一个枚举,而toList方法只取一个空格分隔的字符串并返回一个列表(这意味着用作REPL)

我试图让自己熟悉一些新的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);
    }