【问题标题】:enum question. String and integer relationship枚举问题。字符串和整数的关系
【发布时间】:2022-01-17 05:57:00
【问题描述】:

我有一个基本的 if-else if 代码块。这是简化版

if (var == 1) {
  finalString = "string1";
} else if (var == 3) {
  finalString = "string3";
} else if (var == 4) {
  finalString = "string4";
} else {
  finalString = "no string found";
}

我正在尝试使用枚举方法,所以我创建了一个枚举类

public enum MyValues {
  string1(1),
  string2(3),
  string4(4);
  ...
  ...
}

有没有办法用我创建的枚举来改进我的 if/else 语句?

【问题讨论】:

    标签: java enums


    【解决方案1】:

    您最好使用Map 映射int <--> String

    Map<Integer, String> map = Map.of(1, "string1", 2, "string2", 3, "string3");
    
    int aKey = 1;
    String finalString = map.getOrDefault(aKey, "no string found");
    
    System.out.println(map.getOrDefault( 1, "no string found"));  // string1
    System.out.println(map.getOrDefault(10, "no string found"));  // no string found
    

    【讨论】:

      【解决方案2】:

      如果你真的必须使用枚举,你可以这样做:

          public enum MyValues {
              string1(1),
              string2(3),
              string4(4),
              default_value(-1);
      
              private final int key;
              MyValues(int key) {
                  this.key = key;
              }
      
              public MyValues getByKey(int key){
                  return Arrays.stream(values())
                          .filter(e -> e.key == key)
                          .findAny()
                          .orElse(default_value);
              }
          }
      

      如果您不必使用枚举,请参阅azro's answer

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多