Java类设计,支持多值选项

时间:2011-08-05 14:12:12

标签: java class-design

以下是一些代码:

ENJOY08A,
AUTO09B,
PLAY06D,
SUMMER08W,
WINTER03S,
LEAF02A,

这些值中的每一个都对应于特定区域。 例如,ENJOY08AAUTO09B对应DEPT_A

PLAY06D对应DEPT_B

SUMMER08WWINTER03SLEAF02A对应DEPT_C

有固定数量的区域(5个区域),但代码无限制。代码只对应一个区域,但区域可以有任意数量的代码。

以上都不会存储在数据库中。

我需要创建一个支持以下操作的Java类。 鉴于代码,我需要知道相应的区域。 鉴于该区域,我需要知道所有相应的代码。

设计Java类的最佳方法是什么?

5 个答案:

答案 0 :(得分:2)

查看番石榴multimap。我相信它提供了你想要的功能。

答案 1 :(得分:0)

由于代码数量不受限制,您需要制定将代码映射到部门的规则。可能它会像添加所有代码并采用模数5那样。这个规则可以有无数的选择。

这样的东西
public class DepartmentCoder {

    public static String toCode(Department department) {
        // TODO: Randomly generate a string having the desired property, such
        // as the sum of the string's codepoint modulo the number of departments
        // equaling the ordinal value of the department.       
    }

    public static Department(String code) {
        // TODO: Do some math on the codepoints of the string
        return result % Deparatments.NUMBER_OF_DEPARTMENTS;
    }
}

我认为,“代码”(与压缩或加密相对)的概念是代码值是固定的。任何基于规则的解决方案都可以更容易找到。

答案 2 :(得分:0)

我认为最简单的方法是将AREAS放入<String, Set> HashMap,然后将所有关联的CODES输入到相关的地图中。然后,您可以获取区域的所有代码集或迭代集以查找包含您要搜索的代码的代码。

for (String k : (Set<String>)areas.keySet()) {
 if (areas.get(k).contains(theCode))
  return k;
}
return "NO CORRESPONDING AREA FOUND";

答案 3 :(得分:0)

  1. 使用MultiMap(Google番石榴图书馆)作为后端,这是一张双向地图。
  2. 使用普通看跌期权填充地图,无论是在施工期间还是使用Java Properties
  3. 从属性文件填充
  4. 提供两种接口方法:regionForCode(String code)codeForRegion(String region),使用BiMap检索映射值。
  5. 您甚至可以考虑将区域放入enum而不是简单的String,因为您的区域值是固定的。然后将更一致地描述域名。

    编辑:我注意到BiMap用于独特的映射。使用MultiMap的anser是正确的,所以我更正了我的答案。

答案 4 :(得分:0)

我会使用一个包含两个Maps的课程。

第一个是Map<String, Set<String>>,用于查找给定区域的代码集(或List)。有人还提出了Guava的MultiMap,这基本上就是这个。

第二个是Map<String, String>用于查找任何给定代码的区域。

然后,只需实施相应的String findAreaForCode(String code)Set<String> listCodesInArea(String area)方法。

最后,如果区域列表很小,有限且相对静态(不需要在运行时动态增长)那么我会考虑使用Java enum代替普通{{1 }}