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

时间:2016-06-22 06:05:00

标签: java lambda java-8 java-stream

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

Key=Integer(string.length)
value=List

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

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

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);        
}

1 个答案:

答案 0 :(得分:6)

这正是groupingBy收集器的设计目的:

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

请注意,顺便说一句,您的代码定义为Map<Integer, String>,而根据问题的描述,它应定义为Map<Integer, List<String>>,因为上面的代码段定义了它。