如何将缩写映射到完整字符串?

时间:2014-06-16 07:42:31

标签: java enums

我想创建从缩写到完整字符串的映射,例如: MC - MasterCard

我后来想要将该映射用于不知道缩写但只知道完整字符串的web服务。

这些映射应该是枚举还是HashMaps?我能想到以下解决方案:

代表enum

String cc = TypeCreditCard.MASTER.getValue("MC").getFullname();
xml.setOrganisation(cc);

表示静态HashMap<String, String>

String cc = creditCards.get("MC");
xml.setOrganisation(cc);

你更喜欢什么,为什么?

3 个答案:

答案 0 :(得分:1)

我把它实现为这样的枚举:

public enum CC {
    MC("MasterCard"),
    V("VISA");

    private CC(String fullString) {
        this.fullString = fullString;
    }

    private String fullString;

    public String getFullString() {
        return this.fullString;
    }

    public static CC of(String fullString) {

        for (CC cc: CC.values()) {
            if (cc.getFullString().equals(fullString) {
                return cc;             
            }
        }
        return null;

    }
}

然后,您可以使用

获取完整字符串
String fullString = CC.MC.getfullScreen();

并使用

获取缩写
CC abbreviation = CC.of("MasterCard");

答案 1 :(得分:1)

如果您的密钥可以由enum描述,那么至少可以使用EnumMap而不是HashMap来理解这些密钥,原因如下:

  • EnumMap针对enum个密钥进行了优化
  • 使用EnumMap作为关键对象时,
  • HashMap的效果可能优于enum
  • 由于EnumMap未在密钥上调用hashCode方法,因此无法发生冲突。

有关EnumMapthis文章的官方文档的更多信息。

答案 2 :(得分:0)

这是一个主观问题。没有“正确”的答案。

对我而言;枚举最适合于将值作为参数传递的用例,并且您希望确保它在编译时是一组众所周知的值之一。

当值表示应用程序所处理的数据时,最好使用Map。如果您的应用程序不需要执行if x = enum then do this类型的逻辑,那么请使用Map。如果它使用不同的代码来计算不同的选项,请使用枚举。

如果我只是想将信用卡缩写映射到更具描述性的名称,我会使用properties file(当然会实现Map)。