【问题标题】:Recursively Create Hasmaps in Java在 Java 中递归创建 Hashmap
【发布时间】:2011-11-09 10:02:28
【问题描述】:

我正在尝试为我输入的每个文档创建一个新的HashMap。在伪代码中,我可以想到类似的东西:

For(eachInputDoc)
{
    Map<String, String> mapInputNumber = new HashMap<String, String>;
}

因此对于 4 个文档,您将拥有:

mapInput1
mapInput2
mapInput3
mapInput4

我怎样才能做到这一点?

【问题讨论】:

  • 嗯,使用 HashMap.. 你的问题到底是什么?
  • 我想要总共 4 个哈希图,或者 10 个,或者 50 个,具体取决于输入是什么。
  • 您正在寻找一系列地图。在 Java 中,这通常表示为 ArrayList&lt;HashMap&lt;K,V&gt;&gt;,其中序列 (ArrayList) 中的每个元素都表示一个文档 (HashMap),但是,以后最好有:ArrayList&lt;Document&gt; 并使 Maps 对此不透明。
  • 乔恩是对的。声明需要在编译时存在,并且伪代码中的声明根本不存在,因为它在 for (=process) 的范围内。因此,解决方案是寻求如上文和下文所述的替代声明。

标签: java arrays list generics hashmap


【解决方案1】:

看起来您正在尝试动态声明变量。你不能在 Java 中这样做——变量本身是在编译时确定的。但是,您可以创建一个列表:

List<Map<String, String>> maps = new ArrayList<Map<String, String>>();
for (Document doc : docs)
{
    Map<String, String> map = new HashMap<String, String>();
    // Populate map from doc
    maps.add(map);
}

【讨论】:

  • 我仍然无法理解这样的泛型和代码。顺便关注一下Martijn。我想他要去的地方:)
【解决方案2】:

我建议你制作一个 HashMap 的 ArrayList。

【讨论】:

    【解决方案3】:

    您不能在 Java 中动态生成 mapInput1、mapInput2 等名称。您需要考虑数组或List。你的问题也不是递归的。

    【讨论】:

      【解决方案4】:

      我会这样做:

      Map<MyDocClass, Map<String, String>> myDocData = new HashMapMap<MyDocClass, Map<String, String>>();
      for(MyDocClass doc : myDocs) {
        Map<String, String> data = new HashMap<String, String>();
        // populate the data
        myDocData.put(doc, data);
      }
      

      然后您可以通过以下方式轻松访问每个文档的数据

      Map<String, String> data = myDocData.get(doc);
      

      【讨论】:

        【解决方案5】:

        如果您知道/想要引用文档的名称,您甚至可以使用 HashMap 的 HashMap。

        【讨论】:

          【解决方案6】:

          我会有另一个地图来保存 mapInputs,如下所示:

          Map<Integer,Map<String,String>> context = new HashMap<Integer,Map<String,String>>();
          for each(inputDoc)
          {
            Map<String, String> mapInput = new HashMap<String, String>();
            context.put(index,mapInput);
          }
          

          您可以使用 List(array,linked) 而不是 MAP,但这取决于您将如何访问该 inputMaps!我会说使用 ArrayList 也是一个好方法!

          【讨论】:

            【解决方案7】:

            您需要将哈希映射放入另一个(动态)容器中,例如 ArrayList 或其他 HashMap。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-10-13
              相关资源
              最近更新 更多