如何使用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%的案例我不需要将该值作为另一个列表,我能以某种方式针对这种情况进行优化吗?答案 0 :(得分:2)
不确定MultiMap最适合您在此处描述的内容。在multimap中,您可以使用同一个键的多个值。这不是您的XML描述的内容。您的XML描述了一个层次结构,其中每个值都有一个路径,可能连接多个键以描述它在层次结构中的位置。
从建模的角度来看,我考虑使用两种类型的XML节点。 1保存值,另一个保存节点(想想文件与目录)。您需要切换XML,以便在两种不同类型之间进行清晰的描述。解析这种方式会更容易。
所以,粗略的伪代码..
class Container {
private Map<String,String> keyValuePairs;
private Map<String,Container> children;
}
这给你无限深度。每个容器都可以容纳keyValue对以及其他容器。顶级节点应该是根容器。递归应该是微不足道的。按键/分隔符遍历也应该很容易。
可能比您需要的更灵活。根据需要修剪。
您还可以合并值/容器的概念,但随后您的建模会变得更加丑陋。这是一个权衡。