列表到地图 - Collectors.toMap()

时间:2016-11-24 18:35:45

标签: java java-8

我有一个List<String> abc集合。我需要将其转换为Map<String, TreeSet<String>,其中键是来自abc的排序字符串,并且在排序之前将此字符串添加到TreeSet中。 可以使用Collectors.toMap()

离。伪代码: List<String> abc = ["ala","laa","qwe"]

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

2 个答案:

答案 0 :(得分:4)

groupingBy是合适的收藏家

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

答案 1 :(得分: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]}