简化开关语句以避免代码重复

发布于 2025-02-01 09:12:01 字数 512 浏览 4 评论 0原文

我有以下代码:(

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;
  ...
}

案例后有一个断点,我只是在这里写的),

所以这是一个问题:

有16个不同的案例语句都具有完全相同的代码.format()。

有什么方法可以简化此代码?


注意:Java 8是必须的

I have the following code:

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;
  ...
}

(there's a break statement after the cases, I just haven't written it here)

So here's the problem:

There's 16 different case statements all having the exact same code, except for the argument to String.format().

Is there any way I can simplify this code?


Note: Java 8 is a must

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心凉 2025-02-08 09:12:01

好吧,如果您的所有情况都具有确切的形式,那么您可以简单地做类似的事情:

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);

或使用MAP查找值:

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);

Well, if all of your cases have that exact form, then you could simply do something like this:

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);

Or use a Map to look up the value:

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);
-柠檬树下少年和吉他 2025-02-08 09:12:01

地图在其他地方概述的方法可能是Java 8的最佳方法,但请注意,在Java 14开始,您可以使用Switch表达式:

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

The Map approach outlined elsewhere is probably your best best for Java 8, but note that as of Java 14, you can use a switch expression:

String surname = switch (name) { 
    case "name1" -> "surname1";
    case "name2" -> "surname2";
    ...
};
String fullName = String.format("%s %s", name, surname);
 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文