2016-11-24 91 views
2

我有一個List<String> abc集合。我需要將它轉換爲Map<String, TreeSet<String>,其中鍵是abc的排序字符串,並且此排序前的字符串被添加到TreeSet。 有可能使用Collectors.toMap()列表到地圖 - Collectors.toMap()

ex。僞代碼: List<String> abc = ["ala","laa","qwe"]

Map<String, TreeSet<String> = {key = "aal" , values in treeset = "ala" , "laa" key = "eqw" values in treeset = "qwe"}

+1

你能提供什麼樣的列表包含和什麼地圖包含示例值? – developer

+1

對應於'abc'鍵的'TreeSet'值應該是多少? – nullpointer

+0

已添加僞代碼。 –

回答

4

groupingBy是適當的集電極

Map<String, TreeSet<String>> map =  
    list.stream().collect(Collectors.groupingBy(
     s -> withSortedChars(s), 
     Collectors.toCollection(TreeSet::new))); 
0

在情況下,如果還需要進行排序的鑰匙,你可以試試下面

public static void main(String[] args) { 
    List<String> abc = Arrays.asList("ala", "laa", "qwe"); 
    Map<String, TreeSet<String>> sorted = abc.stream() 
      .collect(Collectors.groupingBy(Utils::sortByChar, TreeMap::new, Collectors.toCollection(TreeSet::new))); 
    System.out.println(sorted); 
} 

public static class Utils { 
    public static String sortByChar(String s) { 
     char[] arr = s.toCharArray(); 
     Arrays.sort(arr); 
     return new String(arr); 
    } 
} 

輸出

{aal=[ala, laa], eqw=[qwe]}