java - 使用 Guava Multimap 表示 xml 名称和值

标签 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 集合,其中值是另一个 keyValuePair 集合。

在 C# 中我可以这样做:

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

我被告知要查看 Guava 的多重 map ,但不知道如何正确使用它,有人可以帮助我吗?

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

最佳答案

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

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

所以,在粗略的伪代码中..

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

这给你无限的深度。每个容器都可以像其他容器一样保存键值对。顶级节点应该是根容器。递归应该是微不足道的。通过键/分隔符进行遍历也应该很容易。

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

您还可以合并值/容器的概念,但这样您的建模就会变得有点难看。这是一个权衡。

关于java - 使用 Guava Multimap 表示 xml 名称和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8453869/

相关文章:

C#:将子项添加到集合并在同一调用中设置子项的父项

java - Java 集合中的原始数组

caching - 如何为动态 bean 内的方法启用缓存

java - Java中预定 future 的回调

java - Google Multimap 中的通用

java - 如何在具有 GridLayout 的 JPanels 中居中对齐所有内容

java - 如何从方法中正确处理异常?

java - 将图形绕给定点旋转一定角度

java - 这个 android java 文件中的这些数字是什么?

java集合排序问题