将静态2D字符串数组转换为HashMap

时间:2009-11-09 17:38:42

标签: java

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

例如,拿这个:

final String[][] sheetMap = { /* XSD Name,  XSL Sheet Name */
                              {"FileHeader", "FileHeader"}, 
                              {"AccountRecord", "AccountRecord"}, 
                              {"DriverCardRecord", "DriverCardRecord"}, 
                              {"AssetCardRecord", "AssetCardRecord"},
                              {"SiteCardRecord", "SiteCardRecord"}
                            };

这很可能是从文件中加载的,而且会更大。

7 个答案:

答案 0 :(得分:20)

final Map<String, String> map = new HashMap<String, String>(sheetMap.length);
for (String[] mapping : sheetMap)
{
    map.put(mapping[0], mapping[1]);
}

答案 1 :(得分:3)

如果您只想以方便的方式初始化地图,可以使用double brace initialization

Map<String, String > sheetMap = new HashMap<String, String >() {{
   put( "FileHeader", "FileHeader" ); 
   put( "AccountRecord", "AccountRecord" ); 
   put( "DriverCardRecord", "DriverCardRecord" ); 
   put( "AssetCardRecord", "AssetCardRecord" );
   put( "SiteCardRecord", "SiteCardRecord" );
}};

答案 2 :(得分:3)

作为tradeJmark的一个稍微更清洁的替代方案答案:

String[][] arr = // your two dimensional array
Map<String, String> arrMap = Arrays.stream(arr).collect(Collectors.toMap(e -> e[0], e -> e[1]));

// Sanity check!
for (Entry<String, String> e : arrMap.entrySet()) {
    System.out.println(e.getKey() + " : " + e.getValue());
}

答案 3 :(得分:2)

等待;如果要从文件加载,通过中间数组步骤!在创建阵列之前,您必须首先加载它,否则您将不知道阵列的大小。只需创建一个HashMap并在阅读时添加每个条目。

答案 4 :(得分:1)

当然,现有的答案效果很好,但为了不断用新信息更新本网站,这里有一种方法可以在Java 8中实现:

String[][] arr = {{"key", "val"}, {"key2", "val2"}};
HashMap<String, String> map = Arrays.stream(arr)
        .collect(HashMap<String, String>::new,
                (mp, ar) -> mp.put(ar[0], ar[1]),
                HashMap<String, String>::putAll);

Java 8 Stream非常棒,我建议您查看更多详细信息,但以下是此特定操作的基础知识:

  • Arrays.stream将获得与Stream<String[]>合作。
  • collect获取您的Stream并将其缩减为收集所有成员的单个对象。它需要三个功能。第一个函数(供应商)生成一个收集成员的对象的新实例,因此在我们的示例中,只是创建HashMap的标准方法。第二个函数,累加器,定义如何将Stream的成员包含到目标对象中,在您的情况下,我们只想put键和值,定义为第一个和第二个值来自每个数组,进入地图。第三个函数,即组合器,可以组合两个目标对象,如果由于某种原因,JVM决定用多个HashMap s执行累积步骤(在这种情况下,或者其他任何目标)另一种情况下的对象)然后需要将它们合并为一个,主要用于异步执行,尽管通常不会发生这种情况。

答案 5 :(得分:1)

更简洁的流是:

 import static java.util.Arrays.stream;
 import static java.util.stream.Collectors.toMap;
 import java.util.Map;

     ...

 public static Map<String, String> asMap(String[][] data) {
     return stream(data).collect(toMap( m->m[0], m->m[1] ));
 }

     ...

答案 6 :(得分:0)

Java 8种方式

  public static Map<String, String> convert2DArrayToMap(String[][] data){
    return Arrays.stream(data).collect(Collectors.toMap(m -> m[0], m -> m[1]));
  }

带循环

public static Map<String, String> convert2DArrayToMap(String[][] data)
  {
    Map<String, String> map = new HashMap<>();
    for (String[] m : data)
    {
      if (map.put(m[0], m[1]) != null)
      {
        throw new IllegalStateException("Duplicate key");
      }
    }
    return map;
  }