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模式匹配?
你不能只用一个简单的开关吗?
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)
除了适用于字符串和值的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)
除了支持其他键类型外,它还允许在运行时组装映射,例如使用由不同的(可能是动态加载的)模块等提供的处理程序。