代码之家  ›  专栏  ›  技术社区  ›  Zed

Java枚举反向查找

  •  1
  • Zed  · 技术社区  · 7 年前

    所以我有一个枚举,它不能像我预期的那样工作,需要进行一些修改:

    public enum MyEnum {
    
        CODE000("text description comes here"),
    
        private final String value;
    
        private static final Map<String, MyEnum> LOOKUP = Maps.uniqueIndex(
                Arrays.asList(MyEnum.values()),
                MyEnum::getValue
        );
    
        MyEnum(final String value) {
            this.value = value;
        }
    
        public String getValue() {
            return value;
    
        }
    
    
        public static MyEnum fromStatus(String status) {
            return LOOKUP.get(status);
        }
    }
    

    它现在的工作方式是:

    MyEnum.fromStatus("text description comes here") 当然,我想换一种方式:

    MyEnum.fromStatus("CODE000") 把我还给你 "text description comes here"

    有人能建议我怎么改这个吗?

    4 回复  |  直到 7 年前
        1
  •  6
  •   ernest_k Petronella    7 年前

    valueOf

    MyEnum code000 =  MyEnum.valueOf("CODE000");
    

    String val = code000.getValue();
    

    MyEnum

        2
  •  0
  •   Thiyagu    7 年前

    MyEnum::getValue MyEnum::name

    MyEnum getValue

        3
  •  0
  •   Omid Nazerizadeh    7 年前

    public static String fromStatus(String status) {
        MyEnum myEnum = valueOf(status);
    
        return myEnum.getValue();
    }
    
        4
  •  0
  •   LuCio    7 年前

    valueOf IllegalArgumentException

    Maps null


      public static MyEnum fromStatus(String status) { ... }
    
      public static String fromStatus(String name) { ... }
    

    MyEnum.fromStatus("CODE000") fromName MyEnum

    public enum MyEnum {
    
      CODE000("text description comes here");
    
      private final String value;
    
      private static final Map<String, MyEnum> LOOKUP_ENUM = Maps.uniqueIndex(Arrays.asList(MyEnum.values()), MyEnum::getValue);
      private static final Map<String, String> LOOKUP_STATUS = Arrays.stream(MyEnum.values()).collect(Collectors.toMap(MyEnum::name, MyEnum::getValue));
    
      MyEnum(final String value) {
        this.value = value;
      }
    
      public String getValue() {
        return value;
    
      }
    
      public static MyEnum fromStatus(String status) {
        return LOOKUP_ENUM.get(status);
      }
    
      public static String fromName(String name) {
        return LOOKUP_STATUS.get(name);
      }
    
    }
    

      private static final Map<String, MyEnum> LOOKUP = Maps.uniqueIndex(Arrays.asList(MyEnum.values()), MyEnum::name);
    
      public static MyEnum byName(String name) {
        return LOOKUP.get(name);
      }
    

    System.out.println(MyEnum.fromStatus("text description comes here")); // CODE000
    System.out.println(MyEnum.fromStatus("invalid")); // null - no exception
    System.out.println(MyEnum.fromStatus(null)); // null - no exception
    
    System.out.println(MyEnum.fromName("CODE000")); // "text description comes here"
    System.out.println(MyEnum.fromName("invalid")); // null - no exception
    System.out.println(MyEnum.fromName(null)); // null - no exception
    
    System.out.println(MyEnum.byName("CODE000")); // CODE000
    System.out.println(MyEnum.byName("invalid")); // null - no exception
    System.out.println(MyEnum.byName(null)); // null - no exception
    

    byName statusByName


    Optional<String> Optional<MyEnum>

      public static Optional<MyEnum> fromStatus(String status) { ... }
      public static Optional<String> statusByName(String name) { ... }
      public static Optional<MyEnum> byName(String name) { ... }