我想要一张允许树状行为的地图。我希望能够定义从字符串到对象的Map,可以是另一个映射,也可以是字符串:
Map<String,(String OR Map)>
我认为我知道如何做的唯一方法是通过访客模式。是否有已经实现的数据结构?
更新: 以下是上下文: 我想解析通过邮寄请求提交的表单。表单是多级的,可以有任意数量的字段(由用户选择)。我决定做的是在表格中用数字命名字段:
我决定将其分解为|然后创建一个类似树的结构,所以它看起来像这样:
只有最后一片叶子会包含字符串。没有那么多的领域,所以我有一种感觉使用Map可能有点矫枉过正,但说实话,我真的不知道如何用其他任何东西来做这件事。
答案 0 :(得分:3)
引入代表String
或Map
的对象。大概是你以一种有共同行为的方式使用它们?这可以被抽象为一个公共基类,它听起来有点像composite pattern(树状行为)。例如:
interface StructuredObject {}
class Leaf implements StructuredObject {}
class Composite implements StructuredObject {}
Map<String, StructuredObject> map = ...;
正如您所指出的那样,您可以使用访问者模式遍历地图并避免类型转换。
答案 1 :(得分:0)
大多数地图实现都具有特定类型的值。如果您想要多种值类型,可以通过打包您选择的地图来完成此操作,例如:一个TreeMap。
答案 2 :(得分:-1)
Google Collections为此用例提供了一个非常好的API MultiMap