首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列表到Map - Collectors.toMap()

列表到Map - Collectors.toMap()
EN

Stack Overflow用户
提问于 2016-11-24 18:35:44
回答 2查看 512关注 0票数 2

我有一个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"}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-24 18:57:40

groupingBy是适当的收集器。

代码语言:javascript
复制
Map<String, TreeSet<String>> map =    
    list.stream().collect(Collectors.groupingBy(
        s -> withSortedChars(s),
        Collectors.toCollection(TreeSet::new)));
票数 4
EN

Stack Overflow用户

发布于 2016-11-24 19:11:56

如果还需要对密钥进行排序,可以在下面进行尝试

代码语言:javascript
复制
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);
    }
}

输出

代码语言:javascript
复制
{aal=[ala, laa], eqw=[qwe]}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40792811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档