【问题标题】:Convert Hash Map to 2D Array将哈希映射转换为二维数组
【发布时间】:2011-01-16 22:34:24
【问题描述】:

将 HashMap 转换为 2D 数组的最简单方法是什么?

【问题讨论】:

标签: java arrays hashmap


【解决方案1】:

使用 Java 8 流:

@Test
void testMapToArray() {
    Map<String, Object> map = new HashMap<>();
    map.put("key1", "value1");
    map.put("key2", 2);

    Object[][] arr =
        map.entrySet().stream()
                .map(e -> new Object[]{e.getKey(), e.getValue()})
                .toArray(Object[][]::new);

    System.out.println(Arrays.deepToString(arr));
}

输出:

[[key1, value1], [key2, 2]]

【讨论】:

    【解决方案2】:

    怎么样

    Object[][] array = new Object[][]{map.keySet.toArray(), map.entrySet.toArray()};
    

    或者,更具体地了解类型,假设它们是 StringsSettoArray 采用提示参数,因此

    String[][] array = new String[][]{map.keySet.toArray(new String[0]), map.entrySet.toArray(new String[0])};
    

    编辑:几天后我才意识到,虽然这可能偶然起作用,但总的来说它不应该。原因是中间的Set;尽管它“由地图支持”,但似乎没有明确保证它会以任何特定顺序进行迭代。因此,key-array 和 entry-array 的顺序可能不一样,这肯定是一场灾难!

    【讨论】:

    • 我确实喜欢您的方法,因为您可以在单行中做到这一点。然而,你为什么使用map.keySetmap.entrySet 而不是map.keySet()map.entrySet()
    【解决方案3】:
    HashMap map = new HashMap();
    Object[][] arr = new Object[map.size()][2];
    Set entries = map.entrySet();
    Iterator entriesIterator = entries.iterator();
    
    int i = 0;
    while(entriesIterator.hasNext()){
    
        Map.Entry mapping = (Map.Entry) entriesIterator.next();
    
        arr[i][0] = mapping.getKey();
        arr[i][1] = mapping.getValue();
    
        i++;
    }
    

    【讨论】:

    • 现在我们有流我们可以创建一个oneliner吗?
    • 查看带有 Java 8 流的单行代码 here
    【解决方案4】:

    使用 entrySet 遍历您的 Map,并使用 Entry 对象填充您的数组记录

    【讨论】:

      【解决方案5】:

      只有在key和value的类型相同时才能这样做。

      给定:

      HashMap<String,String> map;
      

      我可以用这个简单的循环从这个地图创建一个数组:

      String[][] array = new String[map.size()][2];
      int count = 0;
      for(Map.Entry<String,String> entry : map.entrySet()){
          array[count][0] = entry.getKey();
          array[count][1] = entry.getValue();
          count++;
      }
      

      【讨论】:

        猜你喜欢
        • 2016-05-08
        • 1970-01-01
        • 2011-05-18
        • 2013-11-20
        • 2011-12-10
        • 2019-07-14
        • 2017-11-22
        • 1970-01-01
        • 2012-12-05
        相关资源
        最近更新 更多