2016-11-24 6 views
2

Ich habe eine List<String> abc Sammlung. Ich muss es in Map<String, TreeSet<String> konvertieren, wobei der Schlüssel die sortierte Zeichenfolge von abc ist und diese Zeichenfolge vor dem Sortieren zu TreeSet hinzugefügt wird. Es ist möglich, Collectors.toMap()?Liste auf Karte - Collectors.toMap()

ex. Pseudo-Code: List<String> abc = ["ala","laa","qwe"]

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

+1

Können Sie Beispielwerte angeben, welche Liste enthält und welche Map enthält? – developer

+1

was ist der 'TreeSet' Wert, der' abc' entspricht? – nullpointer

+0

Pseudocode hinzugefügt. –

Antwort

4

groupingBy ist der geeignete Sammler

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

Im Fall, wenn die Schlüssel muss auch, sortiert werden Sie unter

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); 
    } 
} 

Ausgang

versuchen
{aal=[ala, laa], eqw=[qwe]} 
Verwandte Themen