繁体   English   中英

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

[英]How to map abbreviation to full strings?

我想创建一个从缩写到完整字符串的映射,例如: 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);

您想要什么,为什么?

我将其实现为这样的枚举:

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

如果您的键可以由enum描述,那么至少出于以下原因,使用EnumMap而不是HashMap是值得的:

  • EnumMap针对enum键进行了优化
  • 使用enum作为关键对象时, EnumMap的性能可能优于HashMap
  • 由于EnumMap不会在键上调用hashCode方法,因此不会发生冲突。

更多关于本作的官方文档EnumMap这个文章。

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

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

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

如果我只是想将信用卡缩写映射到更具描述性的名称,则可以使用属性文件 (当然可以实现Map)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM