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

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

例如,拿这个:

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

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

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

如果您只想以方便的方式初始化地图,可以使用双括号初始化 :

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

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

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

 String[][] arr = // your two dimensional array Map arrMap = Arrays.stream(arr).collect(Collectors.toMap(e -> e[0], e -> e[1])); // Sanity check! for (Entry e : arrMap.entrySet()) { System.out.println(e.getKey() + " : " + e.getValue()); } 

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

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

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

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