问题:通过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);
}
答案 0 :(得分:6)
这正是groupingBy
收集器的设计目的:
Map<Integer, List<String>> map =
listString.stream().collect(Collectors.groupingBy(String::length));
请注意,顺便说一句,您的代码定义为Map<Integer, String>
,而根据问题的描述,它应定义为Map<Integer, List<String>>
,因为上面的代码段定义了它。