使用Guava Multimap来表示xml名称和值

时间:2011-12-10 02:07:11

标签: java collections guava

如何使用Guava Multimap表示以下xml:

<node key="abc123">some value</node>
<node key="asdf22">
   <node key="as234">some value343</node>
   <node key="sggg234">some value234234</node>
</node>

在我的xml文件中,90%的时间给定节点元素没有内部节点(如果我可以优化它?)。

我想要的是KeyValuePair集合,其中值是keyValuePairs的另一个集合。

在c#中我能做到:

public List<string,List<KeyValuePair<string,string>>> nodes;

我被告知看看Guava的多图,但不确定如何正确使用它,有人可以帮助我吗?

顺便说一句,由于90%的案例我不需要将该值作为另一个列表,我能以某种方式针对这种情况进行优化吗?

1 个答案:

答案 0 :(得分:2)

不确定MultiMap最适合您在此处描述的内容。在multimap中,您可以使用同一个键的多个值。这不是您的XML描述的内容。您的XML描述了一个层次结构,其中每个值都有一个路径,可能连接多个键以描述它在层次结构中的位置。

从建模的角度来看,我考虑使用两种类型的XML节点。 1保存值,另一个保存节点(想想文件与目录)。您需要切换XML,以便在两种不同类型之间进行清晰的描述。解析这种方式会更容易。

所以,粗略的伪代码..

class Container {
  private Map<String,String> keyValuePairs;
  private Map<String,Container> children;
}

这给你无限深度。每个容器都可以容纳keyValue对以及其他容器。顶级节点应该是根容器。递归应该是微不足道的。按键/分隔符遍历也应该很容易。

可能比您需要的更灵活。根据需要修剪。

您还可以合并值/容器的概念,但随后您的建模会变得更加丑陋。这是一个权衡。