循环通过一堆字符和匹配字符串

时间:2016-03-18 14:43:11

标签: java

我有一些这种格式的对象:

public class Firm {
    private int id;
    private int workCode;
    private String name;
    ...
}

这些对象是通过API收集的,我无法修改。

id是唯一的,workCode可以是720个不同的值之一。这720个代码映射到一个组。所以我的问题是,我想知道这些公司所属的集团。

天真的解决方案是一个开关/案例解决方案,如:

switch(workCode) {
  case 1:
  case 4:
  case 52:
  case 77:
  case 300:
    return "Industry";
  case 2:
  case 3:
  case 600:
  case 601:
  case 715:
    return "Healthcare";
  ...
}

但这真的是最好的解决方案吗?这个问题一直困扰着我一段时间,所以我希望你们能帮助我。

2 个答案:

答案 0 :(得分:2)

为代码创建WorkCodeObject int,为扇区创建String

结果

public class WorkCodeObject {
    int workcode;
    String sector;
}

public class Firm {
    private int id;
    private WorkCodeObject workCode;
    //...
}

答案 1 :(得分:1)

我建议使用枚举:

public enum Group {

    INDUSTRY  ("Industry",   1, 4, 52, 77, 300),
    HEALTHCARE("Healthcare", 2, 3, 600, 601, 715);
    // ...

    int[] codes;
    String name;

    Group(String name, int... codes) {
        this.codes = codes;
        this.name = name;
    }

    // this map will hold mappings from code to `Group`
    // for use in `ofCode()` method
    static Map<Integer, Group> groups = new HashMap<Integer, Group>() {{
        for (Group g : Group.values()) {
            for (Integer c : g.codes)
                put(c, g);
        }
    }};

    public String getName() { 
        return name; 
    }

    static public Group ofCode(int code) { 
        return groups.get(code);
    }
}

当您需要按代码分组名称时,只需致电:

Group.ofCode(4).getName();