首页 > 解决方案 > Collectors.groupingBy(...) 的返回类型是什么?

问题描述

我有一个MultiValueMap<String, String>,假设我想按密钥的长度对其进行分组。

MultiValueMap<String, String> map = // Some defined MultiValueMap ... 

map.entrySet().stream().collect(Collectors.groupingBy(x -> {
    return x.getKey().length();
}));

问题是,我无法弄清楚return上述语句的类型。我试过了,例如

Map<String, Set<Map.Entry<String, List<String>>>> groupped = map.entrySet().stream().collect(Collectors.groupingBy(x -> {
    return x.getKey().length();
}));

但后来我得到x.getKey()无法解决。

标签: javajava-8

解决方案


它应该返回Map<Integer, List<Map.Entry<String, String>>>而不是 Map<String, Set<Map.Entry<String, List<String>>>>.

请注意您在上面包含的String键和值,它应该是键和值,因为您正在使用的这个重载返回 a:Set<...>IntegerList<...>groupingBy

Map<K, List<T>>其键是将分类函数应用于输入元素所产生的值,其对应的值是包含输入元素的列表,这些输入元素映射到分类函数下的关联键。


推荐阅读