2016-11-24 2 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

Что означает значение 'TreeSet', соответствующее клавишам' abc'? – 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]} 
Смежные вопросы