我有一个单词流,我想根据相同元素(=单词)的出现对它们进行排序.
例如:{hello,world,hello}
至
Map<String,List<String>>
你好你好你好}
世界,{世界}
到目前为止我有什么:
Map<Object,List<String>> list = streamofWords.collect(Collectors.groupingBy(???));
问题1:流似乎丢失了他正在处理字符串的信息,因此编译器强制我将类型更改为Object,List
问题2:我不知道在胃肠道内放入什么,以同样的方式将其分组.我知道我能够处理lambda表达式中的单个元素,但我不知道如何到达每个元素的“外部”以检查是否相等.
谢谢
解决方法
您要搜索的KeyExtractor是标识功能:
Map<String,List<String>> list = streamofWords.collect(Collectors.groupingBy(Function.identity()));
编辑补充说明:
> Function.identity()使用一个方法返回一个’Function’,它只返回它获得的参数.> Collectors.groupingBy(Function< S,K> keyExtractor)提供收集器,其收集流的所有元素到Map< K,List< S>>.它使用keyExtractor实现来检查流的S类对象,并从中推导出类型为K的键.此键是映射的键,用于获取(或创建)添加了流元素的结果映射中的列表.