[英]How to convert Map<String, Set<String>> to Map<String, String[]> in Java
我正在從方法中獲取Map<String, Set<String>>
形式的數據。 但我希望它采用Map<String, String[]>
。
即,我只想將映射值從Set<String>
轉換為特定鍵的String[]
數組。
我嘗試過這種方式,迭代加載的set映射並正確獲取鍵的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);
誰能幫我?
您的解決方案幾乎可以正常工作,因此您應該考慮以下幾點:
Iterator
是通用類型,因此您不應該進行額外的轉換 Iterator
沒有意義: for
循環對每個Iterable
(哪個Collection -> Set
是隱式的)進行此操作 Map.Entry
key
,但是您也可以使用value,無需調用get
兩次。 因此,轉換為:
for (Map.Entry<String, Set<String>> entry: testmap.entrySet()) {
testmapArray.put(entry.getKey(),
entry.getValue().toArray(new String[entry.getValue().size()]));
}
如果您使用的是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()]);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.