Lambda Expression创建一个以Integer为键,List为值的地图

Nil*_*pal 2 java lambda java-8 java-stream

问题:通过lambda表达式解决以下问题.给定一个字符串列表,创建一个地图

Key=Integer(string.length)
value=List
Run Code Online (Sandbox Code Playgroud)

如果两个字符串与长度匹配,则创建所有此类匹配字符串长度的列表.

我不知道如何为流中所有匹配的字符串长度创建列表!我尝试了以下方式,这给了我重复键的例外,这很明显.

private static void changeToMap(List<String> listString)
{
    Map<Integer, String> map=listString.stream().collect(Collectors.toMap(x->x.toString().length(),x->x));
    System.out.println(map);        
}
Run Code Online (Sandbox Code Playgroud)

Mur*_*nik 6

这正是groupingBy收藏家设计的目的:

Map<Integer, List<String>> map = 
    listString.stream().collect(Collectors.groupingBy(String::length));
Run Code Online (Sandbox Code Playgroud)

请注意,BTW,您的代码定义为map Map<Integer, String>,而根据问题的描述,它应该定义为Map<Integer, List<String>>,如上面的代码片段所定义的那样.