简化 switch 语句以避免代码重复

jus*_*guy 0 java switch-statement java-8

我有以下代码:

String fullName = "";
switch(name) {
  case "name1":
    fullName = String.format("%s %s", name, "surname1");
    break;

  case "name2":
    fullName = String.format("%s %s", name, "surname2");    
    break;

  case "name3":
    fullName = String.format("%s %s", name, "surname3");
    break;
  ...
}
Run Code Online (Sandbox Code Playgroud)

(case后面有一个break语句,我只是没有写在这里)

所以问题是这样的:

有 16 个不同的 case 语句,除了 的参数之外,它们都具有完全相同的代码String.format()

有什么办法可以简化这段代码吗?


注意:Java 8 是必须的

MC *_*ror 5

好吧,如果您的所有案例都具有这种确切的形式,那么您可以简单地执行以下操作:

String surname;
switch (name) {
    case "name1":
        surname = "surname1";
        break;
    case "name2":
        surname = "surname2";
        break;
    default:
        surname = "";
        break;
}
String fullname = String.format("%s %s", name, surname);
Run Code Online (Sandbox Code Playgroud)

或者使用 aMap来查找值:

Map<String, String> mapping = new HashMap<>();
mapping.put("name1", "surname1");
mapping.put("name2", "surname2");
mapping.put("name3", "surname3");

String surname = mapping.get(name); // Assuming name is always a valid map entry
String fullname = String.format("%s %s", name, surname);
Run Code Online (Sandbox Code Playgroud)


Bri*_*etz 5

其他地方概述的方法Map可能是最适合 Java 8 的方法,但请注意,从 Java 14 开始,您可以使用 switch 表达式:

String surname = switch (name) { 
    case "name1" -> "surname1";
    case "name2" -> "surname2";
    ...
};
String fullName = String.format("%s %s", name, surname);
 
Run Code Online (Sandbox Code Playgroud)