将2D数组字符串转换为HashMap的最简单方法是什么?
例如,拿这个:
final String[][] sheetMap = { /* XSD Name, XSL Sheet Name */
{"FileHeader", "FileHeader"},
{"AccountRecord", "AccountRecord"},
{"DriverCardRecord", "DriverCardRecord"},
{"AssetCardRecord", "AssetCardRecord"},
{"SiteCardRecord", "SiteCardRecord"}
};
这很可能是从文件中加载的,而且会更大。
答案 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;
}