簡體   English   中英

如何轉換地圖 <String, Set<String> &gt;到地圖 <String, String[]> 在Java中

[英]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);

誰能幫我?

您的解決方案幾乎可以正常工作,因此您應該考慮以下幾點:

  1. Iterator是通用類型,因此您不應該進行額外的轉換
  2. 顯式使用Iterator沒有意義: for循環對每個Iterable (哪個Collection -> Set是隱式的)進行此操作
  3. 您只使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM