【问题标题】:java hashmap with List as value to propertyjava hashmap 与 List 作为属性的值
【发布时间】:2011-10-10 20:27:06
【问题描述】:

我有一个以下格式的 HashMap。

HashMap<String, List<String>> map

我正在努力寻找将其写入属性文件的最佳方法,这可能吗?我对HashMap&lt;String, String&gt; hashmap 没有任何问题,但是当值是 List 时,我无法找出存储它的最佳方法。我不在乎它是 xml 格式还是任何其他格式,这样我就可以轻松打开文件并将其序列化或返回到 hashmap 中。

感谢任何指导

【问题讨论】:

  • 属性是字符串。将List 连接到逗号分隔。例如value1,value2,value3,value4 并将其添加到您的 Properties 对象中。
  • @BrianRoach 会假设值字符串不包含逗号。
  • @John - 嗯,是的。如果他们这样做了,您可以引用这些值,使用管道而不是逗号等......不是火箭科学:)
  • @BrianRoach 别这么说!我可能没有付出那么多! ;)

标签: java list hashmap


【解决方案1】:

首先,您可能需要考虑使用来自 Guava 的 ListMultimap。它实现了Map&lt;Key, List&lt;Value&gt;&gt;

接下来,我将设置一个 XML 模式,其中每个元素都有一个名称和一个值列表。使用 JAXB 将数据编组到文件中。

【讨论】:

    【解决方案2】:

    我不确定您当前在做什么,但您始终可以获取一组构成地图的 Map.Entry&lt;String,List&lt;String&gt;&gt; 实例并以您想要的任何方式写出它们。见this

    伪代码看起来像

    for (Map.Entry<String,List<String>> entry : map.entrySet()) {
        String key = entry.getKey();
        List<String> value = entry.getValue();
    
        // now loop over value, which will be of type List<String>
    }
    

    【讨论】:

      【解决方案3】:

      HashMap 是可序列化的;所以你可以默认这样做。

      FileOutputStream fileStream = new FileOutputStream("map.map");
      ObjectOutputStream os = new ObjectOutputStream(fileStream);
      os.writeObject(map);
      os.close();
      

      【讨论】:

      • 这是我希望做的,我的值是一个列表是一个子列表,这会导致问题,但还不确定最好的解决方法。
      猜你喜欢
      • 2017-06-30
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多