if语句替代Java 8

1 java lambda if-statement java-8

有这样的功能:

public void toDo(Req req){

    if(req.getSection().equals("A")) {
        return execA(req);
    }

    if(req.getSection().equals("B")) {
        return execB(req);
    }

    if(req.getSection().equals("N")) {
        return execN(req);
    }
}
Run Code Online (Sandbox Code Playgroud)

我该如何简化它?一般的想法,如何排除if语句的识别类型的功能 - 字符串 - A,B,N.Java 8的任何解决方案都与Scala模式匹配?

SCo*_*uto 8

你不能只用一个简单的开关吗?

switch (req.getSection()){
    case "A" : execA(req);  break;
    case "B" : execB(req);  break;
    case "N" : execN(req);  break;
    default:  break;
}
Run Code Online (Sandbox Code Playgroud)


Hol*_*ger 5

除了适用于字符串和值的switch解决方案之外int,您还可以使用Map:

Map<String,Consumer<Req>> handlers;
{
    handlers.put("A", req -> execA(req));
    handlers.put("B", req -> execB(req));
    handlers.put("N", req -> execN(req));
}
Consumer<Req> defaultBehavior=req-> {
    throw new IllegalArgumentException(req.getSection());
};
public void toDo(Req req) {
    handlers.getOrDefault(req.getSection(), defaultBehavior).accept(req);
}
Run Code Online (Sandbox Code Playgroud)

除了支持其他键类型外,它还允许在运行时组装映射,例如使用由不同的(可能是动态加载的)模块等提供的处理程序。