【问题标题】:Simplify static mapping of values简化值的静态映射
【发布时间】:2020-04-10 23:59:14
【问题描述】:

我想简化给定的代码(实际上是状态的映射):

private static final Map<SomeStatusEnum, OtherStatusEnum> STATUS_ENUM_MAP = Map.of(
      SomeStatusEnum.A, OtherStatusEnum.OK,
      SomeStatusEnum.B, OtherStatusEnum.NOK,
      SomeStatusEnum.C, OtherStatusEnum.NOK,
      SomeStatusEnum.D, OtherStatusEnum.NOK,
      SomeStatusEnum.E, OtherStatusEnum.NOK,
      SomeStatusEnum.F, OtherStatusEnum.NOK
  );

到如下结构:

private static final Map<SomeStatusEnum, OtherStatusEnum> STATUS_ENUM_MAP = Map.of(
     SomeStatusEnum.A, OtherStatusEnum.OK,
     *ALL OTHER SomeStatusEnums*, OtherStatusEnum.NOK     
 );

因此只有SomeStatusEnum.A 指向OtherStatusEnum.OK,而所有其他指向OtherStatusEnum.NOK 而不将所有这些都明确写在地图中。

谁有想法?

【问题讨论】:

  • 您需要使用地图吗?为什么不使用OtherStatusEnum statusMapping(SomeStatusEnum en){ switch (en){ case A: return OtherStatusEnum.OK; default: return OtherStatusEnum.NOK; } }这样的方法呢?这里*ALL OTHER SomeStatusEnums*default: 处理。如果您有很多应该映射为 OK 的情况,您可以使用 case A: case B: return OtherStatusEnum.OK;(请参阅 Using two values for one switch case statement
  • 完美解决了,会用这个方法:-)

标签: java mapping simplify


【解决方案1】:

不确定这是否是您要查找的内容 - 但您可以使用带有 getOrDefault 函数的地图,如下所示:

private static final Map<SomeStatusEnum, OtherStatusEnum> STATUS_ENUM_MAP = 
  Map.of(SomeStatusEnum.A, OtherStatusEnum.OK);

然后将地图用作:

STATUS_ENUM_MAP.getOrDefault(value, OtherStatusEnum.NOK)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多