我从方法中以Map<String, Set<String>>
的形式获取数据。但我希望它的形式为Map<String, String[]>
。
即,我想仅将Set<String>
到String[]
数组的地图值转换为特定键。
我试过这种方式,迭代加载的集合映射并正确获取键的String []数组。
但我只是想知道,有没有比这更好的解决方案。
Map<String, Set<String>> testmap = new HashMap<String, Set<String>>();
Map<String, String[]> testmapArray = new HashMap<String, String[]>();
Set<String> testSet = new TreeSet<String>();
testSet.add("1");
testSet.add("2");
testSet.add("3");
testmap.put("A", testSet);
testmapArray.put("A", testSet.toArray(new String[testSet.size()]));
Set<String> testSet1 = new TreeSet<String>();
testSet1.add("4");
testSet1.add("5");
testSet1.add("6");
testmap.put("B", testSet1);
testmapArray.put("A", testSet1.toArray(new String[testSet1.size()]));
System.out.println(testmap);
Iterator it = testmap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
testmapArray.put(pair.getKey().toString(), testmap.get(pair.getKey()).toArray(new String[testmap.get(pair.getKey()).size()]));
}
System.out.println(testmapArray);
任何人都可以帮助我吗?
答案 0 :(得分:3)
您的解决方案几乎正常运行,因此您应该考虑以下几点:
Iterator
是通用类型,因此您不应该执行其他投射Iterator
毫无意义:for
循环对每个Iterable
隐含地执行此操作(Collection -> Set
是key
中仅使用Map.Entry
,但您也可以使用值,无需另外拨打get
两次因此,转换将是:
for (Map.Entry<String, Set<String>> entry: testmap.entrySet()) {
testmapArray.put(entry.getKey(),
entry.getValue().toArray(new String[entry.getValue().size()]));
}
答案 1 :(得分:0)
如果您使用的是Java 8,那么您可以使用流来实现它:
testmapArray = testmap.entrySet().stream().collect(Collectors.toMap(entry -> entry.getKey(), entry-> setToArray(entry.getValue())));
方法setToArray
是:
private static String[] setToArray(Set<String> set) {
return set.toArray(new String[set.size()]);
}